仅在所有字符都属于指定的字符时匹配

时间:2015-08-12 00:48:33

标签: python regex

  

匹配 3.14529
   匹配 -255.34
   匹配 128
   匹配 1.9e10
   匹配 123,340.00
   Skip 720p

为了跳过最后一个,我尝试了这个正则表达式:

([\d\.e\-,])

标准是:如果字符串中的每个字符都是数字(\ d)或点(。)或指数(e)或负数( - )或逗号(,),则匹配字符串,如果任何其他字符都会跳过整个字符串。

问题是最后一个有一个" p"在它,它必须被忽略。但是,由于它前面的数字(720),它也包含在匹配中。

2 个答案:

答案 0 :(得分:3)

尝试使用^和$来匹配整个字符串:

^[\d\.e\-,]+$

^匹配字符串的开头,$结束。

答案 1 :(得分:3)

您必须利用主播^$,但是如果您使用:

^[\d\.e\-,]+$

...这将允许匹配:

.e.e.e---,,
1,.2,2e.eee
.....
---
etc...

我可以拿出这个正则表达式:

^-?\d{1,3}(,\d{3})*\.?\d*(e\d*)?$

Regular expression visualization

<强> Working demo

enter image description here

您可以使用以下代码:

import re
p = re.compile(ur'^-?\d{1,3}(,\d{3})*\.?\d*(e\d*)?$', re.MULTILINE)
test_str = u"Match\n3.14529\n-255.34\n128\n1.9e10\n123,340.00\n\nSkip \n720p"

re.findall(p, test_str)