具有多个条件的字符串的正则表达式

时间:2018-02-08 03:55:04

标签: r regex

我有一个表达 - ] 006IRBTS1 [g600 niT erauqS ehcoirB g004 g001 / p 57.01 $ hcnuB / p 51.2 $

我想用粗体提取部分。逻辑是:

  1. 以“]”开头。
  2. 拿走所有内容,直到你得到“[”包括“[”。
  3. 包括接下来的10个字符/数字,无论它是什么。
  4. 在这10个字符/数字之后,包括所有字母和空格
  5. 直到你达到一个数字为止。捕获数字和随后的所有内容,直到您遇到空白。

    我在R中使用以下正则表达式。当然不起作用。有什么想法吗?

    "^].+\\[.{10}[A-Za-z\\s]+[0-9\\.]+\\s"
    

1 个答案:

答案 0 :(得分:2)

1)以“]”开头。

\]

2)拿走所有内容,直到你得到“[”包括“[”。

[^\[]+\[

3)包括接下来的10个字符/数字。

.{,10}

4)在这10个字符/数字之后,包括所有字母和空格,直到你点到一个数字。

[a-zA-Z\s]+\d

5)捕获数字和随后的所有内容,直到你碰到一个空格。

[^\s]+

组合:

\][^\[]+\[.{,10}[a-zA-Z\s]+\d[^\s]+

Regex101:https://regex101.com/r/TpoV52/1

<强>更新

我将最后一个量词从+更改为*,因此它可以匹配某些 none 更多字符。

这是因为给定“捕获数字和随后的所有内容,直到你遇到空白”,有可能在该数字之后立即出现一个空格。您在评论中提供的第二个主题字符串就是这种情况:

]006IRBTS1[ g600 niT erauqS ehcoirB g4 g001 /p 57.01$ hcnuB /p 51.2$

下面的更新模式将停留在“捕获该数字”(g 4 ),因为“并且直到你击中空白之后的所有内容”实际上都没有。 (空格是数字之后的下一个字符。)

\][^\[]+\[.{,10}[a-zA-Z\s]+\d[^\s]*

Regex101:https://regex101.com/r/TpoV52/2