你如何在Python中使用正則表達式用一個for循環正則表達式中的for循環
example data
abc 1 xyz 0
abc 2 xyz 1
abc 3 xyz 2
怎麼寫正則表達式類似下面
for i in range(1, 3):
re.match(abc +i xyz +(i-1))
你如何在Python中使用正則表達式用一個for循環正則表達式中的for循環
example data
abc 1 xyz 0
abc 2 xyz 1
abc 3 xyz 2
怎麼寫正則表達式類似下面
for i in range(1, 3):
re.match(abc +i xyz +(i-1))
這種替代i
進入第一%s
和i-1
分成第二個%s
re.match("abc %s xyz %s"%(i,i-1), data)
另一種方式來寫這將是
re.match("abc "+str(i)+" xyz "+str(i-1), data)
感謝您的信息 – user204488 2009-11-09 07:38:53
你不能讓一個單一的正則表達式,其中包括它在正則表達式匹配時計算數學表達式。但是,您可以動態生成正則表達式,使用普通的Python字符串格式化技術:
import re
example_data = """
this line will not match
abc 1 xyz 0
this line will not match
abc 2 xyz 1
abc 2 xyz 2 will not match
abc 3 xyz 2
"""
for i in range(1, 4):
pattern = "abc %d xyz %d" % (i, (i - 1))
match_group = re.search(pattern, example_data)
if match_group:
print match_group.group(0)
這將打印:
abc 1 xyz 0
abc 2 xyz 1
abc 3 xyz 2
這可能是一個更好的主意,這樣做的abyx建議,並作出單正則表達式與幾個比賽團體,並做基於匹配組捕獲的子數學:
import re
example_data = """
this line will not match
abc 1 xyz 0
this line will not match
abc 2 xyz 1
abc 2 xyz 2 will not match
abc 3 xyz 2
"""
s_pattern = "abc (\d+) xyz (\d+)"
pat = re.compile(s_pattern)
# note that you can pre-compile the single pattern
# you cannot do that with the dynamic patterns
for match_group in re.finditer(pat, example_data):
n1 = int(match_group.group(1))
n2 = int(match_group.group(2))
if n1 > 0 and n1 == n2 + 1:
print match_group.group(0)
這也將打印:
abc 1 xyz 0
abc 2 xyz 1
abc 3 xyz 2
你的示例代碼有什麼問題(除了它缺少關閉的parenthenis和一些引號)? – 2009-11-09 07:05:09
新的python和正則表達式, 有問題與變量「我」正則表達式作爲字母對待。 – user204488 2009-11-09 07:15:04
請發佈您嘗試過的正則表達式。當你說「變量的問題'我'」,請張貼錯誤追溯和正則表達式的問題。請提供哪些內容不適合您的詳細信息。 – 2009-11-09 11:11:32