Regex 不选择是否包含其他字符
假设我有以下数字: 3000公吨 300公吨 44000米 320米 我想选择44000米和3200米 我应该使用什么正则表达式只选择结尾有“m”的数字(逗号分隔),而不选择有“mt”的数字 这就是我尝试过的:Regex 不选择是否包含其他字符,regex,Regex,假设我有以下数字: 3000公吨 300公吨 44000米 320米 我想选择44000米和3200米 我应该使用什么正则表达式只选择结尾有“m”的数字(逗号分隔),而不选择有“mt”的数字 这就是我尝试过的: \d+[,]?\d+m. 我不知道如何否定mt。下面这样的unix解决方案怎么样 > echo "3,000mt 300mt 44,000m 320m" | tr ' ' '\n' | awk -F" " ' $0~/m$/ { print } ' 44,000m 320m &g
\d+[,]?\d+m.
我不知道如何否定mt。下面这样的unix解决方案怎么样
> echo "3,000mt 300mt 44,000m 320m" | tr ' ' '\n' | awk -F" " ' $0~/m$/ { print } '
44,000m
320m
>
您非常接近解决方案,只是错过了检查单词边界(由正则字符
\b
表示)的可能性。因此,与在正则表达式末尾使用任何字符
不同,您可能只会查看字符串是否以单词边界结尾(例如空格或换行符或其他字符):
在哪里
查找任何数字(至少一个)\d+
查找后跟一个或多个数字的逗号(使用括号将其分组,使用(,\d+)
符号可完全选择整个分组)?
- 如上所述,
在单词末尾查找文本m\b
m
9m
或类似字符串。与正则表达式相比,这是一个细微的变化(分组逗号后跟数字)
我通过Python验证了正则表达式,并添加了更多的边缘案例:
>>> import re
>>> text = "3,000mt 300mt 44,000m 1m 1mt 1,3mt 320m"
>>> re.findall(r"\d+(?:,\d+)?m\b", text) # ?: is python specific for findall method
['44,000m', '1m', '320m']
这就是我尝试过的\d+[,]?\d+m。我不知道如何否定mt。谢谢你的回答,但我必须用regex
>>> import re
>>> text = "3,000mt 300mt 44,000m 1m 1mt 1,3mt 320m"
>>> re.findall(r"\d+(?:,\d+)?m\b", text) # ?: is python specific for findall method
['44,000m', '1m', '320m']