簡體   English   中英

如何使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM