python正则表达式:不给它匹配的组

2024-05-19 02:50:49 发布

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

这是模式

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)

这与输入中的任何内容都不匹配:(


Tags: ininfoline模式rootpatternxa0join
2条回答

re中的方括号表示集合

join_pattern = '[' + '|'.join(pattern_strings) + ']'使正则表达式匹配“在{ \ x c 2 d a 0 e 7 3 u f 9 | }中的任何一个字符集”。这可能不是你想要的行为。对于要使用的表达式:

join_pattern = '|'.join(pattern_strings)

不需要括号,除非您试图指定捕获/非捕获组。你知道吗

问题是您已经用方括号包围了正则表达式,[]。这些表示一组字符;即[abc|def]将匹配abc|def中的一个。对于正则表达式,不需要括号。如果这是一个较大表达式的一部分,那么可以使用圆括号()来表示一个组,它将正则表达式的一部分组合在一起。(它也是一个捕获组,因此可以通过.group(1)访问它的内容。)

相关问题 更多 >

    热门问题