这是模式
pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']
join_pattern = '[' + '|'.join(pattern_strings) + ']'
pattern = re.compile(join_pattern)
这是函数
def find_pattern(path):
with open(path, 'r') as f:
for line in f:
# print line
found = pattern.search(line)
if found:
print dir(found)
logging.info('found in line - ' + line)
logging.info('found - ' + str(found.group(0)))
这是输入
\xc2d
d\xa0
\xe7
\xc3\ufffdd
\xc3\ufffdd
\xc2\xa0
\xc3\xa7
\xa0\xa0
'619d813\xa03697'
当我运行这个时,我得到的输出是
INFO:root:found in line - \xc2d
INFO:root:found - d
INFO:root:found in line - d\xa0
INFO:root:found - d
INFO:root:found in line - \xc3\ufffdd
INFO:root:found - u
INFO:root:found in line - \xc3\ufffdd
INFO:root:found - u
INFO:root:found in line - '619d813\xa03697'
INFO:root:found - d
问题
-为什么它不能像\xc2d
那样告诉整个模式?我是不是做错了什么?
-我需要做什么才能得到匹配的模式,比如\xc2d
而不是d
更新
切换到join_pattern = '(' + '|'.join(pattern_strings) + ')'
与任何内容都不匹配
更新1
pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9']
join_pattern = '|'.join(pattern_strings)
pattern = re.compile(join_pattern)
这与输入中的任何内容都不匹配:(
re
中的方括号表示集合join_pattern = '[' + '|'.join(pattern_strings) + ']'
使正则表达式匹配“在{ \ x c 2 d a 0 e 7 3 u f 9 | }
中的任何一个字符集”。这可能不是你想要的行为。对于要使用的表达式:不需要括号,除非您试图指定捕获/非捕获组。你知道吗
问题是您已经用方括号包围了正则表达式,
[]
。这些表示一组字符;即[abc|def]
将匹配a
、b
、c
、|
、d
、e
或f
中的一个。对于正则表达式,不需要括号。如果这是一个较大表达式的一部分,那么可以使用圆括号()
来表示一个组,它将正则表达式的一部分组合在一起。(它也是一个捕获组,因此可以通过.group(1)
访问它的内容。)相关问题 更多 >
编程相关推荐