我需要在字符串中找到以数字(即数字)
开头的单词以下字符串:
1st 2nd 3rd a56b 5th 6th ***7th
应该返回第1个第2个第3个第5个第6个字。
我尝试使用正则表达式:
(\b[^ a-zA-Z ^ *]+(th|rd|st|nd))+
但是这个正则表达式会返回不是以字母开头但不能处理单词以特殊字符开头的情况。
答案 0 :(得分:2)
对于当前字符串,您可以使用类似
的模式(?<!\S)\d+(?:th|rd|st|nd)\b
请参阅regex demo
模式匹配:
(?<!\S)
- 字符串开头或空格后的位置\d+
- 一位或多位(?:th|rd|st|nd)
- 四种选择之一\b
- 一个单词边界。如果您计划在前面有空格或位于字符串开头的数字之后匹配任何0+非空格字符,请使用
(?<!\S)\d\S*
其中\S*
将匹配任何0 +非空白字符。
请参阅this regex demo。
注意:如果不支持lookbehind,请将(?<!\S)
替换为(?:^|\s)
,并使用捕获组包装其余模式以便稍后访问后者:
(?:^|\s)(\d\S*)
,该值将在第1组中。
答案 1 :(得分:0)
要获得以数字/数字开头并以th/st/nd/rd
结尾的单词,您可以试试这个。
((?<!\S)(\d+)(th|rd|nd|st))
(?<!\S)
检测到该词的起始位置
\d+
匹配1位或更多位数
th|rd|st|nd
匹配其中的一个。
您可以查看here