我只想提取匹配的特定字符串
示例作为输入字符串:
13.10.0 /
13.10.1 /
13.10.2 /
13.10.3 /
13.10.4.2 /
13.10.4.4 /
13.10.4.5 /
我正在使用此正则表达式[0-9]+.[0-9]+.[0-9]
从字符串中仅提取digit.digit.digit(如果匹配)
但是在这种情况下,这是与我的正则表达式有关的错误输出:
13.10.0
13.10.1
13.10.2
13.10.3
13.10.4.2(无需匹配此字符串13.10.4)
13.10.4.4(无需匹配此字符串13.10.4)
13.10.4.5(无需匹配此字符串13.10.4)
我需要的正确输出:
13.10.0
13.10.1
13.10.2
13.10.3
答案 0 :(得分:1)
在不知道如何传递这些字符串的情况下很难说-它们是文件中的行吗?编程语言中的字符串数组?
如果您正在使用grep
或类似工具搜索文件,即使只有部分匹配,它也会为您提供所有匹配 的行。
通常,您可以使用anchors来处理此问题,以指定正则表达式必须以该行的第一个字符开始,并以最后一个字符结束(例如^[0-9]+.[0-9]+.[0-9]$
)。 ^
匹配行的开头,$
匹配行的结尾。
在您的情况下,所有行的末尾都有斜杠,因此最简单的解决方法是用^[0-9]+.[0-9]+.[0-9]/
匹配最后一个斜杠。
您也可以使用先行或组匹配斜杠而不返回它-但这更多地取决于您在运行此正则表达式的工具以及处理方式。
如果您的字符串用空格(换行符除外)分隔,则可以用^
(字符串的开头或某些空格字符)替换(^|\s)
(但可以添加一个领先于您的某些结果。
您可能还需要将正则表达式工具设置为在一行中多次匹配(例如-o
中的grep
标志)。同样,在不知道您正在使用哪种正则表达式工具或如何处理结果的情况下,很难给出有用的建议。
答案 1 :(得分:1)
我想你想要
^\d+\.\d+\.\d+$
正好有3个数字组,中间用(文字)点隔开。
答案 2 :(得分:0)
某些工具(如grep)会匹配包含正则表达式的所有行,并且之前/之后可能会有其他字符。
使用$
字符来匹配正则表达式后的行尾。 (还要注意,.
匹配任何字符,而不是文字点)
[0-9]+\.[0-9]+\.[0-9]$