![](/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.