我知道在正则表达式中我们可以使用"determineClickType"
来声明除了之外的东西。例如,^
表示没有空格的字符串。我们如何使用它来找到除了两个以上的连续字符。例如,当一个字符串可以包含[^ ]*?
时,它不包含{{
。我尝试了这些并且没有工作:
{
这是为了捕获以re.compile(r"(\{\{`[^(\{\{)]*?\}\}`)
re.compile(r"(\{\{`[^\{\{]*?\}\}`)
开头并以{{
结尾的文件中的字符串,但不包含}}
,但它们可以包含}}
个字符串}
。使用.*
也不是一种选择。
input_string="blah blah blah {{cite journal |last=Malatesta|first=Errico|title=Towards Anarchism|journal=MAN!|publisher=International Group of San Francisco|location=Los Angeles|oclc=3930443|url=http://www.marxists.org/archive/malatesta/1930s/xx/toanarchy.htm|archiveurl=http://web.archive.org/web/20121107221404/http://marxists.org/archive/malatesta/1930s/xx/toanarchy.htm|archivedate=7 November 2012 |deadurl=no|authorlink=Errico Malatesta |ref=harv}} blah blah blah"
regexp_1 = re.compile(r"(\{\{[^\}]*?\}\})")
output = regexp_1.sub("",input_string )
现在regexp_1
,我想将[^\}]*?
替换为[^\}\}]*?
,我知道[^\}\}]*?
不正确,因为它的工作方式与[^\}]*?
相同。
答案 0 :(得分:1)
这是为了捕获以{{和结尾}}开头的文件中的字符串,但它们不包含}},而它们可以包含单个}
your_string = "{{first group}} {{second {} group}}"
pattern = re.compile(r'{{.*?}}')
pattern.findall(your_string) # returns list of matches
将返回
['{{first group}}', '{{second {} group}}']
答案 1 :(得分:1)
在{{之后看起来你真正想要的是先匹配}}。最简单的正则表达式是:
\{\{.*?\}\}
确保配置。如果允许它们在里面,则匹配换行符。
如果您担心性能,我会说这个正则表达式是最快的之一。替代方案是:
\{\{((?!\}\}).)*\}\}
具有可比性能,因为您将提前检查每个角色
2)使用atomic group和possessive quantifier
\{\{(?>[^{]|\{[^{])**\}\}
由于使用“?>”,这个实际上可能会更快和“**”构造它不会潜水已经匹配的值 - 因此将通过单次运行完成所有事情。 P.S。:确保你的正则表达式引擎支持这种结构。
答案 2 :(得分:0)
对于这种情况,您可以使用negative look ahead:
^((?!}}).)*$
要捕获{{
和}}
之间的字符串,您可以使用前面的正则表达式re.search()
。
>>> s = 'this {{ is {a} sample }}text'
>>> re.search(r'{{(((?!}}).)*)}}',s).group(1)
' is {a} sample '
答案 3 :(得分:0)
据我所知,您不能使用[^word]
之类的内容,因为除了w
,o
,r
,{{1 }}
另外,我知道只有在d
没有跟myword(?!something)
后才能使用myword
等否定前瞻来匹配something
。
然而,为了匹配不是一个单词的东西我知道你必须使用一些技巧,如本文Match everything except for specified strings
中所描述的对于您的具体情况,您可以使用此正则表达式来检查该行是否包含{{
:
^(?!.*\{\{)
<强> Regex Demo 强>
另一方面,如果你使用PCRE正则表达式,那么你可以使用discard动词,所以如果你想跳过像{{something}}
这样的模式,你可以使用它:
\{\{\w+\}\}(*SKIP)(*FAIL)|(\w+)
^^^^^^^^^^^^^^ if your pattern matches, it will be discarded intentionally
<强> Working demo 强>