数字搜索的正则表达式

时间:2011-09-29 18:46:32

标签: regex perl search

我需要一个正则表达式,它会找到一个不在括号内的数字。 例子abcd 1(35)(df)

它只会看到1。

这很复杂吗?我试过,没有运气。 谢谢你的帮助

5 个答案:

答案 0 :(得分:3)

一个简单的解决方案是首先删除不需要的值:

my $string = "abcd 12 (35) (df) 2311,22";
$string =~ s/\(\d+\)//g;         # remove numbers within parens
my @numbers = $string =~ /\d+/g; # extract the numbers

答案 1 :(得分:2)

正则表达式为:

^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$

结果是正则表达式的第一个(也是唯一的)匹配组。

如果正则表达式不匹配,只有当它是整行的内容时,您可能希望删除^$。您还可以使用[a-zA-Z][[:alpha:]]。这取决于您使用的正则表达式引擎,当然还有您要匹配的内容。

perl代码示例:

if (m/^[a-z]+ ([0-9]+) \([0-9]+\) \([a-z]+\)$/) {
  print("$1\n");
}

请注意,您的问题包含的信息不足以使得答案成为可能(您没有说明表达式的一般格式,例如,如果您想匹配整数或浮点数)

答案 2 :(得分:2)

这很难,但这样的事情可能会这样:

^(?:\()(\d+)(?:[^)])|(?:[^(0-9]|^)(\d+)(?:[^)0-9]|^)|(?:[^(])(\d+)(?:\))$

问题是要匹配(123123),还要将字符串123与非括号字符2之间的数字1不匹配和3。字符串的开头和结尾可能还有一些边缘情况。

我的建议是不要使用正则表达式。也许是一个匹配数字的正则表达式,然后使用捕获信息检查周围的字符是否不是括号。

答案 3 :(得分:1)

怎么样

/(?:^|[^\d(])(\d+)(?:[^\d)]|$)/

?这匹配一串

的数字(\d+
  • 前面是字符串的开头,或者不是数字或开括号的字符((?:^|[^\d(])

  • 在字符串结尾处或由不是数字或近括号的字符((?:[^\d)]|$)

  • 成功

答案 4 :(得分:0)

有关详细信息,请参阅Regular Expression Library

此网站可能对您有所帮助。