從這個串列中:
['AUSTRALIA\nBELMONT PARK (WA', '\nR3\n1/5/4/2\n2/3/1/5\nEAGLE FARM (QLD']
我想把它減少到這個串列:
['BELMONT PARK', 'EAGLE FARM']
您可以從第一個串列中看到所需的單詞在'\n'和之間'('。
我嘗試的解決方案是:
for i in x:
result = re.search('\n(.*)(', i)
print(result.group(1))
這將回傳錯誤“未終止的子模式”。謝謝
uj5u.com熱心網友回復:
您收到錯誤,因為(未轉義。無論如何,它不起作用,因為您將獲得以下匹配項:
\nBELMONT PARK (\nR3\n1/5/4/2\n2/3/1/5\nEAGLE FARM (
您可以嘗試以下方法:
(?<=\\n)(?!.*\\n)(.*)(?= \()
(?<=\\n):積極的向后看,以確保\n在比賽之前(?!.*\\n): 負前瞻以確保不\n包含更多內容(.*): 你的比賽(?= \():積極的前瞻,以確保(在比賽之后
uj5u.com熱心網友回復:
您可以在不使用任何環視的情況下獲得匹配項,因為您已經在使用捕獲組。
\n(.*) \(
解釋
\n匹配換行符(.*)捕獲組1,盡可能匹配除換行符以外的任何字符\(匹配一個空格和(
請參閱regex101 演示和Python 演示。
例子
import re
x = ['AUSTRALIA\nBELMONT PARK (WA', '\nR3\n1/5/4/2\n2/3/1/5\nEAGLE FARM (QLD']
pattern = r"\n(.*) \("
for i in x:
m = re.search(pattern, i)
if m:
print(m.group(1))
輸出
BELMONT PARK
EAGLE FARM
如果要回傳串列:
x = ['AUSTRALIA\nBELMONT PARK (WA', '\nR3\n1/5/4/2\n2/3/1/5\nEAGLE FARM (QLD']
pattern = r"\n(.*) \("
res = [m.group(1) for i in x for m in [re.search(pattern, i)] if m]
print(res)
輸出
['BELMONT PARK', 'EAGLE FARM']
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475180.html
