用正则表达式提取字符串数

时间:2019-02-17 11:20:26

标签: regex

我对正则表达式有疑问。我的目标是每当号码落后于这些字符时就获取号码:

  1. ,G‘
  2. ,H‘
  3. ,‘
  4. ,T‘
  5. ,T26‘
  6. ,T’
  7. ,W‘

因此,您可以看到,有6倍的情况下有一个空白,而有一个案例(第6个)没有匹配的空白。

我正在尝试为案例4和6创建一个正则表达式。到目前为止,这是我的正则表达式:

/[T](?:\ )?\d+/

或者这也是我到目前为止得到的另一个解决方案:

/([T](?:\ )|([GHSW]|(T26))\ )?\d+/

但是,我没有得到数字,我也得到了字符T。我如何只获得数字,有什么简单的解决方案让一个正则表达式匹配所有字符而不是创建6 regex if语句..?

示例输入:

  

您好,我叫G 25是Alfred。我H 26正在测试新的正则表达式S2和S 5   这是我的T3测试T 4正则表达式文本。我的T26 2和T265是新的W2   还有W 4。

我想要的(输出):

  1. G之后的25岁
  2. H之后的26岁
  3. S后面的5(不是2,因为S和数字之间没有空格。G,H,S和W也是如此)
  4. T后面的3和4(如果是T,则可以有空格,但不必)
  5. T26之后的2(但不是T265之后的5或265导致T26之后需要留空格)

致以问候,谢谢!

1 个答案:

答案 0 :(得分:2)

此正则表达式应该执行您想要的操作。它寻找

之一
  1. [GHSW]后跟一个空格,或
  2. T26后跟一个空格,或
  3. T后跟一个可选空格

和一些数字,它们在第1组中捕获:

(?:[GHSW]\s|T26\s|T(?!26)\s?)(\d+)

Demo on regex101

如果您只想捕获比赛中的数字并且您的正则表达式风格支持后向,则可以改用以下方法:

(?<=[GHSW]\s|T26\s|T(?!26) |T(?!26))\d+

请注意,我们必须同时为T指定一个空格和一个空格,以确保后面的内容是固定宽度。

Demo on regex101