2017-06-24 25 views
2

我想在異常中使用正則表達式。RegEx表達式來處理多個打破句子的條件

因此它必須返回這些句子(前幾位都包含在字符串)假:

3.{17} this is italics and should break.{18} 

4. this is another sentence and should break. 

5. This is another sentence and should break. 

而且它必須返回對於這些:

There are 2 reasons for this 1. you are here and 2. you are communicating. 

Is it 2? they wanted to know. 

1 digit at the beginning but with 1. with a period should return true.

換句話說,如果字符串的開頭是一個數字,後跟一個時期,它應該返回false(即使"\{\d+\}"跟隨它可選),空格後面的字符無關緊要。如果數字和句號(或!?)嵌入在句子中,後面跟着一個小寫字母,那麼它必須返回true,而在其他情況下,它必須是false。

作爲進一步的說明:這將進入一個java屬性文件,然後將該值傳遞給perl5正則表達式引擎以返回損壞的文本。

我嘗試在一個表達式中表達,但不知何故我無法正確表達。 這是想出了到現在爲止:

^([^0-9\.]+[\.]| 
[^\.!\?]*[\?!]+[\?!\.]+| 
[0-9]+[^\?!\.]+[\?!\.]+| 
[^0-9]*[0-9]+[^\?!\.]+[\?!\.]+) 
(\{\d+\}[\u0020\u00A0]| 
[\u0020\u00A0]*)[a-z] 

我似乎陷入僵局趕來,看不出有什麼是我錯了。

感謝您的任何建議。

更新: 與前瞻更簡單的格式:^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll}基礎上的意見。

+0

句子中是否也有引號,並且'''後面總是有空格? –

+0

@ l'l l - 沒有引號,並且在'.'或'!'或'?'後面有空格我修正了樣品 – ib11

+0

我不明白這個問題。樣本字符串可以用'^ \ D'來匹配。 – melpomene

回答

1

您可以使用

^(?!\d+\.)[^.!?]*[.!?]+(\{\d+\}\s|\s*)\p{Ll} 

regex demo

的模式匹配:

  • ^ - 字符串錨開始
  • (?!\d+\.) - 一個negative lookahead如果它的模式是在字符串的開頭匹配,將失敗的比賽:1+數字緊隨其後,點
  • [^.!?]* - 0+字符以外.!?
  • [.!?]+ - 1以上.!?符號
  • (\{\d+\}\s|\s*) - 無論是{ + 1或多個數字+ }或0+空格(如果你不感興趣,與此捕獲組捕獲的值,則可能將其變爲非- 收到一個加?:後第一個()。
  • \p{Ll} - 一個小寫字母(如果使用u修飾符,它也將匹配所有Unicode小寫字母)。