python正则表达式返回错误的resu

2024-04-29 07:57:27 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我的代码:

import re
str = "?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMPT_CD=T0016&TEXT=한글패러미터"
pattern = re.compile("[a-zA-Z0-9?=&\-_]+")
result = pattern.search(str)
print(result)

结果如下:

<_sre.SRE_Match object; span=(0, 65), match='?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMP>

但我期待这样的结果:

<_sre.SRE_Match object; span=(0, 65), match='?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMPT_CD=T0016&TEXT=>

我找不到那个结果的原因。请给我一些建议。你知道吗

非常感谢。你知道吗


Tags: notextrepagecdresultpatternsre
3条回答

您可以使用:

[\u0000-\u007F]+

Demo

样本来源:(run here

import re
str = "?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMPT_CD=T0016&TEXT=한글패러미터"
pattern = re.compile(r"[\u0000-\u007F]+")
result = pattern.search(str)
print(result.group(0))

您正在打印_sre.SRE_Match的字符串表示形式,它不能保证打印所有匹配的字符。我查看了CPython源代码,发现了以下implementation

static PyObject *
match_repr(MatchObject *self)
{
    PyObject *result;
    PyObject *group0 = match_getslice_by_index(self, 0, Py_None);
    if (group0 == NULL)
        return NULL;
    result = PyUnicode_FromFormat(
            "<%s object; span=(%d, %d), match=%.50R>",
            Py_TYPE(self)->tp_name,
            self->mark[0], self->mark[1], group0);
    Py_DECREF(group0);
    return result;
}

如您所见,它只输出组的前50个字符。你知道吗

您可以使用以下正则表达式进行检查:

In [52]: print(re.compile('.*').search('a' * 48))
<_sre.SRE_Match object; span=(0, 48), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>

In [53]: print(re.compile('.*').search('a' * 49))
<_sre.SRE_Match object; span=(0, 49), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>

In [54]: print(re.compile('.*').search('a' * 50))
<_sre.SRE_Match object; span=(0, 50), match='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>

如您所见,match总是小于或等于50个字符。你知道吗

要获得实际匹配的字符串,可以使用group方法:

In [55]: print(re.compile('.*').search('a' * 50).group(0))
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

In [56]: print(len(re.compile('.*').search('a' * 50).group(0)))
50
>>> 
>>> import re
>>> str3 = "?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMPT_CD=T0016&TEXT=한글패러미터"
>>> pattern = re.compile("[a-zA-Z0-9?=&\-_]+")
>>> result = pattern.search(str3)
>>> print(result.group(0))
?CNTN_CD=A0002400127&PAGE_CD=ET00_1&BLCK_NO=1&CMPT_CD=T0016&TEXT=
>>> 

我测试了你的代码,它的工作方式和你期望的一样,我的python是v2.7

相关问题 更多 >