2024-10-04 11:33:52 发布
网友
我想要一个Python正则表达式来匹配不在简单引号之间的给定单词。我尝试过使用(?! ...),但没有成功。在
(?! ...)
在下面的屏幕截图中,我想匹配除第4行之外的所有foe。在
foe
另外,文本是作为一个大字符串给出的。在
以下是链接regex101,示例文本如下:
var foe = 10; foe = ""; dark_vador = 'bad guy' foe = ' I\'m your father, foe ! ' bar = thingy + foe
你可以试试这:在
((?!\'[\w\s]*)foe(?![\w\s]*\'))
关于this正则表达式如何:
>>> s = '''var foe = 10; foe = ""; dark_vador = 'bad guy' ' I\m your father, foe ! ' bar = thingy + foe''' >>> >>> re.findall(r'(?!\'.*)foe(?!.*\')', s) ['foe', 'foe', 'foe']
这里的诀窍是确保表达式不匹配任何带有前导和尾随'的字符串,并记住要考虑中间的字符,然后是re表达式中的.*。在
'
.*
下面的正则表达式解决方案在大多数情况下都可以工作,但是如果不平衡的单引号出现在字符串文本之外,例如在注释中,它可能会中断。在
在上下文中匹配字符串的一个常见的regex技巧是匹配需要替换和匹配的内容,并捕获需要保留的内容。在
下面是一个Python演示示例:
import re rx = r"('[^'\\]*(?:\\.[^'\\]*)*')|\b{0}\b" s = r""" var foe = 10; foe = ""; dark_vador = 'bad guy' foe = ' I\'m your father, foe ! ' bar = thingy + foe""" toReplace = "foe" res = re.sub(rx.format(toReplace), lambda m: m.group(1) if m.group(1) else 'NEWORD', s) print(res)
参见Python demo
正则表达式看起来像
参见regex demo。在
('[^'\\]*(?:\\.[^'\\]*)*')部分将单引号的字符串文本捕获到组1中,如果匹配,则将其放回结果中,\bfoe\b匹配任何其他字符串上下文中的整个单词{},然后替换为另一个单词。在
('[^'\\]*(?:\\.[^'\\]*)*')
\bfoe\b
注意:要同时匹配双引号字符串文本,请使用r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"。在
r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"
你可以试试这:在
((?!\'[\w\s]*)foe(?![\w\s]*\'))
关于this正则表达式如何:
这里的诀窍是确保表达式不匹配任何带有前导和尾随
'
的字符串,并记住要考虑中间的字符,然后是re表达式中的.*
。在下面的正则表达式解决方案在大多数情况下都可以工作,但是如果不平衡的单引号出现在字符串文本之外,例如在注释中,它可能会中断。在
在上下文中匹配字符串的一个常见的regex技巧是匹配需要替换和匹配的内容,并捕获需要保留的内容。在
下面是一个Python演示示例:
参见Python demo
正则表达式看起来像
^{pr2}$参见regex demo。在
('[^'\\]*(?:\\.[^'\\]*)*')
部分将单引号的字符串文本捕获到组1中,如果匹配,则将其放回结果中,\bfoe\b
匹配任何其他字符串上下文中的整个单词{注意:要同时匹配双引号字符串文本,请使用
r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"
。在相关问题 更多 >
编程相关推荐