繁体   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