我试图写一个正则表达式,它只能从给定的字符串中找到数字。我的意思是:
输入: My number is +12 345 678. I have galaxy s3, its symbol 34abc.
输出:345
和678
(但不是+12
,3
来自words3
或34
from 34abc
)
我只尝试了数字(\d+
),然后将白色和单词字符组合在一起。最接近的是,^\d$
但是由于我的数字是较大字符串的一部分,而不是整个字符串本身,因此不起作用。你能给我一个提示吗?
- - - - 编辑
看起来我只是不知道如何在不实际使用字符的情况下检查字符。就像“跟随空格字符的数字(没有空格)”。
通常,您可以使用lookbehind和lookahead:
(?<=^|\s)\d+(?=$|\s)
使它成为捕获的输出的部分是\d+
。比赛中不包括向后看和向后看。
我只是在正则表达式中包含空格作为定界符,但是您可以\s
根据需要定义任何字符类来替换它们。例如,要允许点作为分隔符(在数字的前面和后面),请使用以下正则表达式:
(?<=^|[\s.])\d+(?=$|[\s.])
的内容(?<=^|\s)
应如下所示:
(?<= ... )
定义后向组。\d+
是^|\s
,表示“行(^
)的开头或空白”。同样,(?=$|\s)
定义前行组(必须跟随捕获的数字),该行可以是行($
)的末尾,也可以是空格。
\b
其他答案中提到的注释:这是一个很好的功能,表示“单词边界”,但“单词字符”不可自定义。这意味着,例如,“ +”字符被视为分隔符,如果使用则不能更改此字符\b
。通过环顾四周,您可以根据需要自定义分隔符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句