我需要一个正则表达式,它会找到一个不在括号内的数字。 例子abcd 1(35)(df)
它只会看到1。
这很复杂吗?我试过,没有运气。 谢谢你的帮助
答案 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+)(?:\))$
问题是要匹配(123
,123)
,还要将字符串123
与非括号字符2
之间的数字1
不匹配和3
。字符串的开头和结尾可能还有一些边缘情况。
我的建议是不要使用正则表达式。也许是一个匹配数字的正则表达式,然后使用捕获信息检查周围的字符是否不是括号。
答案 3 :(得分:1)
怎么样
/(?:^|[^\d(])(\d+)(?:[^\d)]|$)/
?这匹配一串
的数字(\d+
)
前面是字符串的开头,或者不是数字或开括号的字符((?:^|[^\d(])
)
在字符串结尾处或由不是数字或近括号的字符((?:[^\d)]|$)
)
答案 4 :(得分:0)
有关详细信息,请参阅Regular Expression Library。
此网站可能对您有所帮助。