2014-10-16 93 views
0

我有以下字符串:正則表達式中的一個表達式來選擇子

bla bla XX_XXX = 999 OR XX _ XXX = 890 OR XX _X XX = 789 OR XX_ XX = 123 

,我想找回XX_XXXXX _ XXXXX _X XXXX_ XX

我可以使每個單獨工作,但不是一次正式表達。這可能嗎?怎麼樣?

+0

是'_'總是存在於所有的那些 「變量」 的名字呢?例如'/(.{2,3}\s?_\s?.{2,3})= /'可能會訣竅。 – 2014-10-16 14:11:21

+0

你能描述一下你的規則,而不是列舉例子嗎?因爲你提出問題的方式「(XX_XXX)|(XX _ XXX)|(XX _X XX)|(XX_ XX)'是一個正確的答案。像'2個字母后跟一個下劃線和三個字母 - 所有可以用一個空格分開'會更有意義。 – decPL 2014-10-16 14:12:43

+1

對不起,不清楚:x代表任何字母字符,所以每個X可以是[a-zA-Z]。我使用的模式如下所示:「\ s [A-Z] [A-Z] _ [A-Z] * =」 – user782388 2014-10-16 14:17:43

回答

1

可以使用以下正則表達式:

/[A-Z]+\s*_(?:\s*[A-Z])+/ 

上述模式會匹配X秒,然後通過一個或多個的

  • 空間接着X S /下劃線。

regex101 demo

+0

對不起,不清楚:x代表任何字母字符,因此每個X可以是[a-zA-Z]。我使用的模式如下所示:「\ s [A-Z] [A-Z] _ [A-Z] * =」 – user782388 2014-10-16 14:20:47

+0

@ user782388是否要匹配前導空格? – 2014-10-16 14:21:59

+0

@ user782388,我相應地更新了答案。 – falsetru 2014-10-16 14:22:05

0

我想你想這樣的事情,

(?<=\s|^)[A-Z][A-Z]\s*_(?:\s*[A-Z])+ 

DEMO

說明:

      ' ' 
(?<=      look behind to see if there is: 
    \s      whitespace (\n, \r, \t, \f, and " ") 
|      OR 
^      the beginning of the string 
)      end of look-behind 
[A-Z]     any character of: 'A' to 'Z' 
[A-Z]     any character of: 'A' to 'Z' 
\s*      whitespace (\n, \r, \t, \f, and " ") (0 or 
         more times) 
_      '_' 
(?:      group, but do not capture (1 or more 
         times): 
    \s*      whitespace (\n, \r, \t, \f, and " ") (0 
          or more times) 
    [A-Z]     any character of: 'A' to 'Z' 
)+      end of grouping 
+0

這似乎在伎倆。謝謝我會研究你的答案並從中學習。 – user782388 2014-10-16 14:28:01

+0

@ user782388因爲你是Stack overflow的新手,所以我建議你閱讀這個http://stackoverflow.com/help/accepted-answer。 – 2014-10-16 14:31:05

0

你可能需要的東西是這樣的:

([A-Z]\s?){2}_(\s?[A-Z]){2,3} 

用你的符號,這種匹配XX_XXXX_XXX與任何兩個字符之間的可選空白字符。

Demo