以下是我的代码:
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=>
我无法找到该结果的原因。请给我建议。
非常感谢你。
答案 0 :(得分:0)
你可以用这个:
[\u0000-\u007F]+
示例来源:(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))
答案 1 :(得分:0)
>>>
>>> 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
答案 2 :(得分: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