正则表达式查找前后跟不同字符串的数字

时间:2012-10-14 15:23:28

标签: regex bash match

我有一个包含文字和数字的文字文件,例如:

  
MANGO444CHERRYa.b /c-1@2#3APPLEa>b;c. a1$2$3WHITE12 3ab cWHITE5%6^7a=b +cWHITEaba5b6a7baMANGO555CHERRY 1'2'3a,b,c!APPPLE1`2~3ab @cYELLOW123---a- -bcYELLOW

我需要在MANGOCHERRYAPPLE之前的WHITE444之间得到号码(在这种情况下,(?<=MANGO)\d+((=?.*?APPLE)(=?.*?WHITE)) )。大写单词之间的文本可以是任何内容。我试过这个:

444CHERRYa.b /c-1@2#3APPLEB>b;c. a1$2$3WHITE

但它返回:

{{1}}

我希望这能以更好的方式证明这个问题

2 个答案:

答案 0 :(得分:1)

这可能有用。我虽然使用sed。

sed -nr 's/.*MANGO([0-9]+).*APPLE.*WHITE.*/\1/p' yourfile

编辑以检查MANGO和WHITE之间的APPLE。

限制:仅当MANGO-APPLE-WHITE在线内出现一次时才有效。

如果没有-n选项和p标记,sed只会在找不到匹配项时打印出该行。

答案 1 :(得分:0)

如果您需要在MANGOBLACKAPPLE之间捕获小数组:

etuardu@subranu:~$ echo '
> MANGO0012BLACK
> MANGO0045txt
> MANGO2314APPLE
> txt00313BLACK' | grep -Po '(?<=MANGO)\d+(?=BLACK|APPLE)'
0012
2314