我正在學習正則運算式,對此我感到非常沮喪。我有以下文字:
From: sender name
To: the recepient
Subject: well done!
Body: lorem ipsum lorem ipsum
我正在嘗試提取“From”和“To”行中的文本。我寫了以下正則運算式:
(^From: [a-zA-Z]*) |(^To: [a-zA-Z]*) |(^Subject: [a-zA-Z])
我正在使用以下代碼匹配它:
regex = re.compile(pattern, flags=re.IGNORECASE | re.MULTILINE)
result = regex.match(text).groups()
但這僅匹配第一行。我不知道出了什么問題,我似乎也不明白如何正確撰寫正則運算式
uj5u.com熱心網友回復:
試圖與您的方法保持一致,該模式會^From: ([ a-zA-Z]*)\nTo: ([ a-zA-Z]*)導致:
>>> result
('sender name', 'the recepient')
現在,為什么你的模式不起作用?
(^From: [a-zA-Z]*)永遠不會捕獲,sender name因為您不允許使用任何空格[a-zA-Z]- 使用該
A|B模式使其引擎匹配AOR ,因此在遇到后B不會查找您的模式To:From:
uj5u.com熱心網友回復:
您正在使用與使用re.match|的替代方案之一匹配的替代方案。
此外,字符類[a-zA-Z]*是可選的,不匹配空格,[a-zA-Z]只匹配單個字符。
您可以使用 2 個捕獲組,中間有一個換行符,然后匹配From:并To:跟隨該行的其余部分。
import re
text = ("From: sender name\n"
"To: the recepient\n"
"Subject: well done!\n"
"Body: lorem ipsum lorem ipsum")
regex = re.compile(r"^(From: .*)\n(To: .*)", flags=re.IGNORECASE | re.MULTILINE)
print(regex.match(text).groups())
輸出
('From: sender name', 'To: the recepient')
uj5u.com熱心網友回復:
您的正則運算式需要一些作業,并且有多種方法可以獲得結果,但如果您要使用或字符“|”以類似的方式構建您的正則運算式,那么這對您來說是一個好的開始:
import re
example_text = """
From: sender name
To: the recepient
Subject: well done!
Body: lorem ipsum lorem ipsum
"""
pattern = re.compile(r'^From: (. )|^To: (. )|^Subject: (. )', re.MULTILINE)
for match in pattern.finditer(example_text):
print(match.group())
這將輸出:
From: sender name
To: the recepient
Subject: well done!
但是您需要了解預期的輸入。會有空格嗎?如果沒有主題怎么辦?我會留給你找出最好的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420836.html
標籤:
