我正在尝试使用Regex获取下面代码中的fary_trigger_post
。然而,我不明白为什么它总是在匹配模式的末尾包含"
,这是我没有预料到的。有什么想法或建议吗?
re.match(
r'-instance[ "']*(.+)[ "']*$',
'-instance "fary_trigger_post" '.strip(),
flags=re.S).group(1)
'fary_trigger_post"'
谢谢。
(.+
(是贪婪的,并且抓取ANY字符直到输入结束。如果您将输入修改为在最后一个双引号(例如'-instance "fary_trigger_post" asdf'
(之后包含字符,则会在输出中找到双引号和其余字符(例如fary_trigger_post" asdf
(。您应该尝试[^"']+
来捕获除引号之外的所有字符,而不是.+
。这应该会回报您的期望。
re.match(r'-instance[ "']*([^"']+)[ "'].*$', '-instance "fary_trigger_post" '.strip(), flags=re.S).group(1)
另外,请注意,我修改了表达式的末尾以使用.*
,它将匹配最后一个引号后面的任何字符。
以下是我在匹配字符串中使用的内容,但如果不了解所有情况,很难提供更好的答案:
r'-instances+"(.+)"s*$'
当您尝试获取组1(即(.+)
(时,regex将跟随此匹配到字符串的末尾,因为它可以匹配.
(任何字符(1次或多次(但需要最大次数(。我建议使用以下模式:
'-instance[ "']*(.+)["']+ *$'
这将需要regex分别匹配最后的所有空格和所有quoutes,这样它就不会被包括在第1组中