2015-11-17 24 views
3

的精確匹配我試圖解析字符串是以下格式的Python正則表達式:的支架

text="some random string <inAngle> <anotherInAngle> [-option text] [-anotherOption <text>] [-option (Y|N)]" 

我想在字符串中的三個部分分割。

  1. 只是「一些隨機字符串」
  2. 一切,這是隻有在尖括號中。 I.E在角上,另一角在上面。
  3. 方括號中的所有內容。

如果我使用正則表達式

re.findall(r'\[(.+?)\]', text) 

它給了我需要的一切方括號內。如果我用然而尖括號相同的正則表達式,

re.findall(r'<(.+?)>', text) 

它給出的尖括號是方括號內的太中的文本。因此,例如上面的「文本」在[-anotherOption]內。我不要那個。用於尖括號匹配的RegEx應該僅從上面返回「inAngle」「anotherInAngle」。 它是什麼RegEx?

另外我怎樣才能得到第一部分,即「一些隨機字符串」。該字符串可以有2或3字數

+0

您的預期輸出是什麼? –

回答

1

你可以簡單地在尖括號中搜索以前的事情不顧方括號之間的一切:

interm = re.sub(r'\[(.*?)\]', '', text) 
re.findall(r'<(.+?)>', interm) 

輸出

['inAngle', 'anotherInAngle'] 

然後匹配第一部分,匹配所有內容至[<。誠然,如果一個字符串被允許隨機要麼嵌入在第一部分中,這些符號未關閉的這不會工作:

re.findall(r'([^<\[]+)', text)[0] 

輸出

some random string 
+0

謝謝大家。所有的解決方案都很好,但是我會和Macmee一起去,因爲當我把代碼放進去的時候它更容易閱讀:)。我遇到的另一個問題是,在某些情況下,尖括號匹配前面有一個詞。例如:一些隨機字符串-aWord 。我希望獲得-aWord部分以及「字符串」。如何獲得? – user775093

1

嘗試,如果這個正則表達式將capture你需要什麼

\s*([^><[\]]+\b)|\[([^]]*)]|<([^>]*)> 
  • \s*前面加上可選whitespace
  • ([^><[\]]+\b)第1組:在任何non括號直到\b(如果不希望刪除)
  • |\[([^]]*)]或第2組:方括號
  • |<([^>]*)>或第3組內什麼:什麼是尖括號

See demo at regex101(使用「代碼生成器」,如果需要的話)