![](/img/trans.png)
[英]How do I extract specified matches using regular expression in Python?
[英]How do I select variable Regular expression using Python?
我下面有一些數字和字符串行。 有些只有數字,有些則在它們前面也有一些字符串:
'abc' (17245...64590)
'cde' (12244...67730)
'dsa' complement (12345...67890)
我想提取帶數字和不帶數字的兩種格式。 因此,前兩行應僅包含數字,而第三行也應在數字之前包含字符串。
我正在使用此命令來實現這一目標。
result = re.findall("\bcomplement\b|\d+", line)
任何想法,怎么做。 預期的輸出將是這樣的:
17245, 64590
12244, 67730
complement, 12345, 67890
如果括號內的數字塊的數量始終為2,並且用1+點分隔,請使用
re.findall(r'\s{2,}(?:(\w+)\s*)?\((\d+)\.+(\d+)\)', s)
參見regex演示 。 還有一個示例Python演示 :
import re
s= ''''abc' (17245...64590)
'cde' (12244...67730)
'dsa' complement (12345...67890)'''
rx = r"\s{2,}(?:(\w+)\s*)?\((\d+)\.+(\d+)\)"
for x in re.findall(rx, s):
print(", ".join([y for y in x if y]))
細節
\\s{2,}
-2個或更多空格 (?:(\\w+)\\s*)?
-可選的順序:
(\\w+)
-第1組:一個或多個單詞字符 \\s*
-0+空格 \\(
-一個(
(\\d+)
-第2組:一個或多個數字 \\.+
-1個或多個點 (\\d+)
-第3組:一個或多個數字 \\)
-a )
字符。 如果括號內的數字塊的數量可以變化,則可以使用
import re
s= ''''abc' (17245...64590)
'cde' (12244...67730)
'dsa' complement (12345...67890)'''
for m in re.finditer(r'\s{2,}(?:(\w+)\s*)?\(([\d.]+)\)', s):
res = []
if m.group(1):
res.append(m.group(1))
res.extend(re.findall(r'\d+', m.group(2)))
print(", ".join(res))
兩個Python片段輸出:
17245, 64590
12244, 67730
complement, 12345, 67890
請參閱在線Python演示 。 請注意,它可以匹配括號內的任意數量的數字塊,並且假定在第1列和第2列之間至少有2個空格字符。
參見正則表達式演示 。 與第一組的區別在於,沒有第三組,第二組和第三組被捕獲了一個或多個點或數字的第二組([\\d.]+)
取代(這些數字隨后使用re.findall(r'\\d+', m.group(2))
提取) re.findall(r'\\d+', m.group(2))
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.