2012-06-30 41 views
0

我目前使用这个表达式:独立数字正则表达式?

(\d+) 

,我可以得到问题2串:

“2112343和4.99很多”

OR

“4.99 and alot of 2112343”

我得到这个来自:

[2112343, 4, 99] 

我需要只得到 ... 我怎么能做到这一点?

+2

它确实得到“仅数字”。也许你的意思是改写标题? – 2012-06-30 19:32:37

+0

'(?:^ |)(\ d +)(?:$ |)' –

+0

@pst准确地说,它只能得到数字序列,因此'\ d'。 – Gumbo

回答

3

使用环视,你可以限制你的捕捉到全数字未由其他数字或小数点包围:

(?<![0-9.])(\d+)(?![0-9.]) 

另外,如果你,如果你不希望只匹配独立的数字(如“T要匹配的123 abc123def):

(?<!\S)\d+(?!\S) 
+1

所以0.1234.0 - >? – 2012-06-30 19:34:21

+1

故意不匹配。 – Amber

+0

@pst'1'和'4'在'[0-9。]'中,因此由于查找方式的原因而不允许进入匹配组的左侧和右侧。 – Amber

0

试试这个

(?<!\S)\d+(?!\S) 

这只会匹配整数

1

如果我理解你是对的,你希望将这些数字与内部的一个点相匹配,但是不希望在结果集合中包含这些数字。

我将通过2步接近这一点,首先选择所有的数字,还有那些以点:

(\d+(?:\.\d+)*) 

然后过滤掉一切,是不是纯粹的数字,并使用你的第一个正则表达式,并将其应用到每个从第一步的结果集合的项目:

(\d+) 
+0

我同意这种方法;试图想出一个过于复杂的正则表达式没有意义......但是我会使用'[\ d。] +'作为初始选择器。 – 2012-06-30 19:34:50

+0

@pst:问题是如果我们想要对待“123”。如通缉或不通过。您的选择器会匹配它,并在第二步中将其扔掉。我的选择器会匹配“123”并最终保留它。运营商应该在这里决定最适合什么问题...... –

-1
>>>r = re.match("\d+", "23423 in 3.4") 
>>>r.group(0) 
'23423' 
+0

这种解决方案只适用于这种特定情况。我怀疑OP想要一种只适用于这种格式的字符串的解决方案。 –

+0

我不认为多数民众赞成在想什么。这只是他例子中的第一个数字...... –

1

正如我在发表我的评论:

(?:^|)(\d+)(?:$|) 

它将匹配的已完全由数字所有“字”(一个字是由空格字符包围的非空格字符的字符串和或字符串的开始/结束。)

0

尝试此

(?<![0-9.])\d+(?![0-9.]) 

它usees图案

(?<!prefix)position(?!suffix) 

其中(?<!prefix)position是指:不以下前缀匹配位置。

position(?!suffix)表示:匹配位置不在前缀后面。

终于[0-9.]表示:任何数字或小数点。