我的正则表达式适用于 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.search
或 re.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