我想忽略空格并解析像(int, int) xx (int, int)
这样的模式。例如,
import re
m = re.match(r"[\s]*\([\s]*(\d+)[\s]*,[\s]*(\d+)[\s]*\)[\s]*xx[\s]*\([\s]*(\d+)[\s]*,[\s]*(\d+)[\s]*\)[\s]*", " (2, 74) xx (5 ,6), physicist")
print (m.group(0)) # (2, 74) xx (5 ,6)
print (m.group(1)) # 2
print (m.group(2)) # 74
print (m.group(3)) # 5
print (m.group(4)) # 6
正如您所看到的,在我的模式中,有许多[\s]*
代表零个或多个空格。有没有更简单的方法来编写这种模式?
答案 0 :(得分:5)
我不知道正则表达式中的方法,但最简单的解决方案是使用简单的字符串替换:
import re
m = re.match(r"\((\d+),(\d+)\)xx\((\d+),(\d+)\)", " (2, 74) xx (5 ,6), physicist".replace(' ', ''))
print (m.group(0)) # (2,74)xx(5,6)
print (m.group(1)) # 2
print (m.group(2)) # 74
print (m.group(3)) # 5
print (m.group(4)) # 6
您还可以使用正则表达式删除任何类型的空格(而不仅仅是空格):
import re
s = re.sub(r'\s+', '', ' (2, 74) xx (5 ,6), physicist')
m = re.match(r"\((\d+),(\d+)\)xx\((\d+),(\d+)\)", s)
print (m.group(0)) # (2,74)xx(5,6)
print (m.group(1)) # 2
print (m.group(2)) # 74
print (m.group(3)) # 5
print (m.group(4)) # 6
答案 1 :(得分:3)
直接答案是否。即使它们只是白色空间,但事实是它们都是人物,因此,它们是模式的一部分。我认为这里有一些方法
e.g。
guard
答案 2 :(得分:2)
如果您想简化特定模式,您可以在之前的一个单独步骤中消除所有空格,因为它们与您的模式无关。
示例:
import re
input = ' (2, 74) xx (5 ,6), physicist'
m = re.match(r"\((\d+),(\d+)\)xx\((\d+),(\d+)\)", input.replace(' ', '')
答案 3 :(得分:2)
我认为你想要的只是获得所有4个整数,所以你可以删除所有空格然后匹配
import re
a = '( 2 , 74 ) xx (5 , 6 )'
b = re.sub(r'\s+','',a)
m = re.match(r'\((\d+),(\d+)\)xx\((\d+),(\d+)\)',b)
print (m.group(0)) # (2,74)xx(5,6)
print (m.group(1)) # 2
print (m.group(2)) # 74
print (m.group(3)) # 5
print (m.group(4)) # 6