我必须匹配文字。
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})?;$'
答案 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等)。