2012-02-26 67 views
4

我必须匹配一个文本。Python重用正则表达式

EJ:

text = 'C:x=-10.25:y=340.1:z=1;' 

凡在X,Y或Z值接受值的匹配:

-?\d{1,3}(\.\d{1,2})? 

我怎么能重复使用?

这些是唯一的变量值。所有其他角色必须修复。我的意思是,他们必须按照确切的顺序。

有一种简短的方式来表达这一点?

r'^C:x=-?\d{1,3}(.\d{1,2})?:y=-?\d{1,3}(.\d{1,2})?:z=-?\d{1,3}(.\d{1,2})?;$' 

回答

8

乡亲做的事这种有时

label_value = r'\w=-?\d{1,3}(\.\d{1,2})?' 
line = r'^C:{0}:{0}:{0};$'.format(label_value) 
line_pat= re.compile(line) 

这是稍微聪明。

label_value = r'(\w)=(-?\d{1,3}(?:\.\d{1,2})?)' 
line = r'^C:{0}:{0}:{0};$'.format(label_value) 
line_pat= re.compile(line) 

为什么?它收集标签和整个浮点值,而不仅仅是小数点右边的数字。

在不太可能的情况下,标签的顺序实际上是确实是的问题。

value = r'(-?\d{1,3}(?:\.\d{1,2})?)' 
line = r'^C:x={0}:y={0}:z={0};$'.format(value) 
line_pat= re.compile(line) 

这需要按给定顺序的三个标签。其中之一可能会改变。

+0

我想我会把'\ w ='从'label_value'移出来,因为他说他想要'x','y'和'z'的顺序。否则,很好。 – 2012-02-26 22:00:55

+1

@TimPietzcker:这是一个艰难的召唤。当有人说“正是这个顺序”时,我听到“通常是那个顺序”。我从来没有见过这种事情长期保持不变。但是,这可能是一个例外;可能无序实际上是将数据视为无效的理由。 – 2012-02-26 22:03:02

0

由于我提出的正则表达式有一个错误,我已经删除它。

但是,无论何时我需要开发或测试新的正则表达式,我通常都会使用在线工具播放,以便您实时查看正则表达式的结果。

虽然没有具体蟒蛇我一般用这一个

0

这将返回没有出现假阴性,但少数误报:

'^C(:[xyz]=-?\d{1,3}(.\d{1,2})?){3}' 

假正数是x,y和z出现在错误组合中的情况(即y:x:z,x:x:z等)。