python - 正则表达式匹配单词及其后面的内容

标签 python regex

我需要一些关于我正在编写的正则表达式的帮助。我有一个我想要匹配的单词列表以及它们后面可能出现的单词(意思是 [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/

相关文章:

python - 是否有适用于 Azure Synapse 的 Python SDK?

python - 将 HTML 字符串转换为图像数据,并使用 Python 在模板中将其显示为图像

正则表达式捕获迭代器方法移动迭代器

php - 匹配 xxx.xxx.xxx 的正则表达式?

python - 将列表中的值插入列表中

python - 如何在 python 上编写正则表达式来查找 2 到 2,000,000,000 之间的值?

python - 通过 GridSearchCV 测试的仅一类折叠

regex - 对这个正则表达式感到困惑

regex - 正常登录正则表达式

python - 如何使用正则表达式从 HTML 网页中提取信息?