Python重用正则表达式

时间:2012-02-26 21:52:16

标签: python expression

我必须匹配文字。

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})?;$'

3 个答案:

答案 0 :(得分: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 )

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

答案 1 :(得分:0)

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

然而,每当我需要开发或测试新的正则表达式时,我通常都会使用在线工具来实时查看正则表达式的结果。

虽然不是特别是python我通常使用这个

答案 2 :(得分:0)

这将不会返回任何误报,但会返回少量误报:

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

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