Regexpression - 如何在字符串中查找子组

时间:2011-03-30 07:53:04

标签: regex grep

我有

[1] "000010004" "011120000" "002030000" "000300020" "003000020" "001000040" "000030020" "000010112"

[9] "050000000" "000000041" "001020020" "001030001" "001000130" "000000050" "000120020" "000500000"

使用grep我想找到包含

的所有组(“”是一个组内的字符串“)

一个。子组2,3(意思是:...... 2 ...... 3 ......和...... 3 ...... 2 ......)

湾子组1,1,1,2(意思是:...... 1 ... 1 ... 1 ... 2和1 ... 1 ... 2 ... 1 ...等等)

顺序并不重要,但频率确实如此。 a)2和3的含义应该只出现一次。

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

这可以使用lookahead使用正则表达式完成,但不是很漂亮:

例如,为了匹配仅包含一个2和一个3的引用数字,您可以执行此操作(用于可读性的详细正则表达式):

"         # quote
(?=       # Assert that the following can be matched:
 [^\D2]*  # zero or more numbers except 2
 2        # 2
 [^\D2]*  # zero or more numbers except 2
 "        # quote
)         # End of lookahead
(?=[^\D3]*3[^\D3]*") # same for the number 3
(\d+)     # one or more digits, capture the result
"         # quote

准确匹配三个1和一个2

"         # quote
(?=       # Assert that the following can be matched:
 (?:      # Match the following group:
  [^\D1]* # zero or more numbers except 1
  1       # 1
 ){3}     # exactly three times.
 [^\D1]*  # Match zero or more numbers except 1
 "        # quote
)         # End of lookahead
(?=[^\D2]*2[^\D2]*") # as above
(\d+)     # one or more digits, capture the result
"         # quote

我不知道这是否适用于标准grep

答案 1 :(得分:0)

我假设a. numbers 2,3要匹配输入数组的以下条目

[3] "002030000"
[4] "000300020"
[5] "003000020"
[7] "000030020"

b. numbers 1, 1, 1,2您希望匹配以下条目

[2] "011120000"
[8] "000010112"

检查频率,你可能需要一些正则表达式与环视。如果可能的话,这是相当复杂的。

答案 2 :(得分:0)

首先,单独使用grep是不可能的。

但您可以执行以下操作:

  1. 查找所有群组(引用的内容)
  2. 制作套装
  3. 将您的输入与这些集进行比较。

awk中的这一点很简单。