所以我需要匹配|
包围的字符串。那么,模式应该只是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。我可能只是在这里做一些蠢事,所以任何帮助都会受到赞赏。谢谢!
答案 0 :(得分:4)
re.match
将希望匹配从头开始的字符串。在您的情况下,您只需要匹配元素,对吗?在这种情况下,您可以使用re.search
或re.findall
之类的内容,它会在字符串中的任何位置找到匹配项:
>>> re.search(pattern, " |test|").group(0)
'|test|'
>>> re.findall(pattern, " |test|")
['test']
答案 1 :(得分:2)
Python基于正则表达式提供两种不同的基本操作:re.match()
仅检查匹配
在字符串的开头,re.search()
检查字符串中的任何位置(这是Perl所做的)
默认情况下)。
答案 2 :(得分:2)
为了重现在https://regex101.com/上运行的代码,您必须单击左侧的Code Generator
。这将向您显示他们的网站正在使用什么。在这里,您可以使用标志或re
中需要的功能。
注意:
re.MULTILINE
作为默认标志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)))