我的正则表达式适用于 regex101 但不适用于 python? [复制]

Posted

技术标签:

【中文标题】我的正则表达式适用于 regex101 但不适用于 python? [复制]【英文标题】:My regex works on regex101 but doesn't work in python? [duplicate] 【发布时间】:2017-04-30 13:19:46 【问题描述】:

所以我需要匹配被| 包围的字符串。所以,模式应该只是r"\|([^\|]*)\|",对吧?然而:

>>> pattern = r"\|([^\|]*)\|"
>>> re.match(pattern, "|test|")
<_sre.SRE_Match object at 0x10341dd50>
>>> re.match(pattern, "  |test|")
>>> re.match(pattern, "asdf|test|")
>>> re.match(pattern, "asdf|test|1234")
>>> re.match(pattern, "|test|1234")
<_sre.SRE_Match object at 0x10341df30>

仅匹配以| 开头的字符串?它在 regex101 上工作得很好,如果重要的话,这是 python 2.7。我可能只是在这里做一些愚蠢的事情,所以任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

re.match 将要匹配从开头开始的字符串。在您的情况下,您只需要匹配元素,对吗?在这种情况下,您可以使用 re.searchre.findall 之类的东西,它们会在字符串中的任何位置找到匹配项:

>>> re.search(pattern, "  |test|").group(0)
'|test|'

>>> re.findall(pattern, "  |test|")
['test']

【讨论】:

【参考方案2】:

为了重现在https://regex101.com/ 上运行的代码,您必须单击左侧的Code Generator。这将向您展示他们的网站正在使用什么。从那里您可以使用标志,或使用re 中所需的功能。

注意:

https://regex101.com/ 使用 re.MULTILINE 作为默认标志 https://regex101.com/ 使用 re.finditer 作为默认方法
import re

regex = r"where"

test_str = "select * from table where t=3;"

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match matchNum was found at start-end: match".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group groupNum found at start-end: group".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

【讨论】:

【参考方案3】:

Python 提供了两种基于正则表达式的不同原始操作:re.match() 仅检查匹配项 在字符串的开头,而re.search() 检查字符串中任何位置的匹配项(这是 Perl 所做的 默认)。

Document

【讨论】:

谢谢,我知道这对我来说一定是愚蠢的。 这部分非常混乱,所以他们为它写了一个文档。

以上是关于我的正则表达式适用于 regex101 但不适用于 python? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式适用于 regex101.com,但不适用于 prod

Python3 正则表达式不适用于脚本,但适用于 pythex.org

RegEx 替换适用于 Ruby gsub,但不适用于 sed

正则表达式验证不适用于 Google Chrome Android 应用程序,但适用于 Chrome 浏览器 - PC

RegEx 不适用于 .NET,但适用于其他 RegEx 实现

模式在regex101上运行但不适用于Google脚本[重复]