2016-11-12 60 views
2

,我期望擺脫這種輸出是捕獲字符串文字任選的正則表達式

  1. SE 180,個別的研究,16年8月24日,16年12月12日,R MAK
  2. SE 180 ,個別的研究,16年8月24日,第12 /一十六分之一十二,H KATIRCIOGLU

然而,你可以看到的,有時會因爲該數據文件是如何轉換,一個意想不到的(button)出現在第一兩個數據之間領域。

這是我想出的正則表達式。我不明白爲什麼它沒有捕獲。我跳着一雙眼睛會幫助我理解我的錯誤。我仍然是新的正則表達式,但這裏是我所知

在我的情況下,爲了捕獲字符串文字「(按鈕)」,我輸入\(button\)。對於我的數據,字符串文字總是以空格結尾。我想讓整組數據可選。因此,我以(?:\(button\)\s?)?結束。

正則表達式使用

https://regex101.com/r/88VDYN/1

([A-Z]+\s\S+)\s(?:\(button\)\s?)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s 

數據集

SE 180 INDIVIDUAL STUDIES 92 49321 3 SUP 73 P 1/90 F 0730-1020 08/24/16-12/12/16 ENG 189 R MAK 
SE 180 
(button) 
INDIVIDUAL STUDIES 90 49320 3 SUP 73 P 0/50 MW 1500-1615 08/24/16-12/12/16 ENG 337 H KATIRCIOGLU 

回答

3

您的測試字符串實際上有一個以上的空白字符之前和之後(button)。一個是換行符,另一個是簡單的空間。

您需要使用\s+\s*而不是僅僅\s(button)各地:

([A-Z]+\s\S+)\s+(?:\(button\)\s*)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s 
      ^   ^

Regex101 Demo

+0

謝謝先生!對於正則表達式我還是比較新的,所以我自動認爲它更像是我的一個語法錯誤,然後錯過了判斷'\ n'和空格。再次感謝你! –

-2

在你的模式中刪除?:。這是打破它。

([A-Z]+\s\S+)\s(\(button\)\s?)?([A-Z]+.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s?(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))?\s

+0

https://regex101.com/r/heAj8F/1我嘗試過了,它仍然dosent工作,我也有'?:'在那裏,因爲我不希望那裏的數據被捕獲。這不是一個好方法嗎? –

+0

我看到你的第二個測試用例在之前和之後都有換行符(按鈕)。通常是這種情況 – dda

相關問題