我需要一些关于我正在编写的正则表达式的帮助。我有一个我想要匹配的单词列表以及它们后面可能出现的单词(意思是 [A-Za-z/\s]+
的单词),即没有括号、符号、数字。
words = ['qtr','hard','quarter'] # keywords that must exist
test=['id:12345 cli hard/qtr Mix',
'id:12345 cli qtr 90%',
'id:12345 cli hard (red)',
'id:12345 cli hard work','Hello world']
异常(exception)的输出是
['hard/qtr Mix', 'qtr', 'hard', 'hard work', None]
到目前为止我已经尝试过
re.search(r'((hard|qtr|quarter)(?:[[A-Za-z/\s]+]))',x,re.I)
最佳答案
您所拥有的模式的问题,即'((hard|qtr|quarter)(?:[[A-Za-z/\s]+]))',
您有\s
位于方括号 []
内,这意味着单独匹配字符,即 \
或 s
,相反,您只能使用空格字符,即
您可以通过 |
连接 words
列表中的所有单词来创建模式 '((qtr|hard|quarter)([a-zA- Z/]*))'
,然后在列表中的每个字符串中搜索模式,如果找到匹配项,则采用组 0 并将其附加到结果列表中,否则附加 None
:
pattern = re.compile('(('+'|'.join(words)+')([a-zA-Z/ ]*))')
result = []
for x in test:
groups = pattern.search(x)
if groups:
result.append(groups.group(0))
else:
result.append(None)
输出:
result
['hard/qtr Mix', 'qtr ', 'hard ', 'hard work', None]
由于您包含空格字符,因此最终可能会得到一些末尾有空格的值,您可以稍后删除空格字符。
关于python - 正则表达式匹配单词及其后面的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68692183/