我想要一个匹配不在简单引号之间的给定单词的Python正则表达式。我试过使用但没有成功。正则表达式:不匹配引号之间的匹配
在下面的屏幕截图中,我想匹配除第4行中的所有foe
以外的所有图形。
另外,文本是作为一个大字符串给出的。
这里是链接regex101和样品文字下方是:
var foe = 10;
foe = "";
dark_vador = 'bad guy'
foe = ' I\'m your father, foe ! '
bar = thingy + foe
我想要一个匹配不在简单引号之间的给定单词的Python正则表达式。我试过使用但没有成功。正则表达式:不匹配引号之间的匹配
在下面的屏幕截图中,我想匹配除第4行中的所有foe
以外的所有图形。
另外,文本是作为一个大字符串给出的。
这里是链接regex101和样品文字下方是:
var foe = 10;
foe = "";
dark_vador = 'bad guy'
foe = ' I\'m your father, foe ! '
bar = thingy + foe
一个正则表达式的解决方案下面将在大多数情况下工作,但如果不平衡单引号出现串之外可能会破裂文字,例如在评论中。
通常的正则表达式匹配字符串在上下文匹配你需要替换和匹配和捕获你需要保持。
下面是一个简单的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)
正则表达式看起来像
('[^'\\]*(?:\\.[^'\\]*)*')|\bfoe\b
的('[^'\\]*(?:\\.[^'\\]*)*')
部分捕获英格尔引号的字符串文字转换为1组,如果它匹配,它只是放回结果,并\bfoe\b
匹配整个单词foe
在其他任何字符串上下文 - 并且随后被替换为另一个词。
备注:要匹配双引号字符串文字,请使用r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"
。
谢谢,它的功能非常完美! – Liquiid
很高兴为你效劳,请考虑通过点击左侧的✓接受答案。 [如何接受SO答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work))。 –
如何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']
这里的关键是要确保表达式不匹配任何字符串与领先和尾随'
并记住占据之间的字符,此后.*
在重新表达。
它不起作用,如果它匹配一个两个报价之间的敌人。 ='( – Liquiid
@ Liquiid:这些答案都不用理解,但是这对你并没有太大的帮助, –
发布您的试试码 –
您能否指定真正的链接到regex101,而不是屏幕? – RomanPerekhrest
请勿发布屏幕截图 - 在您的代码中进行编辑。 – 2016-12-14 08:37:11