假设我有以下数字:
3,000吨 300吨 44,000m 320m
我希望选择 44,000m 和 320m 。
我应该使用哪种正则表达式来仅选择末尾带有“ m”的数字(以逗号分隔),而不是那些具有“ mt”的数字?
这是我尝试过的:
\d+[,]?\d+m.
我不知道如何取消mt。
答案 0 :(得分:1)
如何像下面这样的unix解决方案
> echo "3,000mt 300mt 44,000m 320m" | tr ' ' '\n' | awk -F" " ' $0~/m$/ { print } '
44,000m
320m
>
答案 1 :(得分:1)
您非常接近解决方案,只错过了检查单词边界(由正则表达式字符\b
表示)的可能性。因此,您可能只会查看该字符串是否以单词边界(例如空格或换行符或其他字符)结尾,而不是在正则表达式的末尾使用任何字符.
:
\d+(,\d+)?m\b
其中
\d+
查找任何数字(至少一个数字)(,\d+)?
查找逗号后跟一个或多个数字(使用括号将其分组,而使用?
符号则整个组是完全可选的)m\b
在单词的末尾查找文字m
使用此正则表达式,您还可以匹配仅一位数字的字符串,后跟 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']