正则表达式查找单引号之间的内容,但前提是包含特定单词

Regex find content in between single quotes, but only if contains certain word

我想获取单引号之间的内容,但前提是它包含某个单词(即'sample_2')。它也不应该与白色 space 匹配。

输入示例:(以下应仅匹配 return:../sample_2/filesample_2/file

['asdf', '../sample_2/file', 'sample_2/file', 'example with space', sample_2, sample]

现在我只有与列表中的前 3 项匹配的项:

'(.\S*?)' 

我似乎找不到 return 包含单词 'sample_2'

的正确正则表达式

如果您想要特定的 words/characters,您需要将它们包含在正则表达式中,而不是使用“\S”。 \S 相当于 [^\r\n\t\f\v ] 或 "any non-whitespace character".

import re

teststr = "['asdf', '../sample_2/file', 'sample_2/file', 'sample_2 with spaces','example with space', sample_2, sample]"
matches = re.findall(r"'([^\s']*sample_2[^\s]*?)',", teststr)
# ['../sample_2/file', 'sample_2/file']

根据您的措辞,您建议可以更改所需的词。在这种情况下,我建议使用 re.compile() 动态创建一个字符串,然后定义正则表达式。

import re
word = 'sample_2'
teststr = "['asdf', '../sample_2/file', 'sample_2/file', ' sample_2 with spaces','example with space', sample_2, sample]"

regex = re.compile("'([^'\s]*"+word+"[^\s]*?)',")
matches = regex.findall(teststr)
# ['../sample_2/file', 'sample_2/file']

此外,如果您还没有听说过此工具,请查看 regex101.com。我总是在这里构建我的正则表达式以确保我得到它们的正确性。它为您提供参考、解释正在发生的事情,甚至允许您在浏览器中测试它。

正则表达式的解释

regex = r"'([^\s']*sample_2[^\s]*?)',"

找到第一个撇号,开始组捕获。捕获除空白字符或相应的结束撇号之外的任何内容。在接受任何非空白字符之前,它必须看到字母 "sample_2"。当您看到结束撇号和逗号时停止组捕获。

注意:在python中,字符串"或'前置字符'r'表示文本被编译为正则表达式。字符串与字符 'r' 也不需要双转义 '\' 字符。