使用正则表达式提取特定的字符串

时间:2019-01-28 09:59:18

标签: regex

我只想提取匹配的特定字符串

示例作为输入字符串:

  • 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

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]$