2017-09-06 63 views
1

我使用正則表達式來確定'€'是否被錯誤地識別爲'e'(例如:Te 23,4意味着T 23.4或e 23 ,4歐元等等)。在我的情況下,表達式:^(T|(?i)(Mio)|(Million)(?-i))?()?[e]()?\d*$效果很好。但有一種情況是我的表情不起作用。如果在'e'(「e」)之後AND之後有空格,則表達式不起作用。正則表達式:忽略字符前後的空白

如何擴展我的表達式,以免這種情況被考慮?我認爲至少在'e'之前或之後必須有一個字符,但我不知道如何在我的表達中實現這一點。

這個正則表達式(((.)[e])|([e](.)))適用於空白問題,但我怎樣才能合併兩個表達式?

+2

()?是說你可以有一個可選的空白。你可以嘗試只是懶惰,並有2個正則表達式。 ^(T i(M i)(M i))((M i))(M i) -i))?()?[e] \ d * $ – sniperd

+1

也許['(^ | T |(?i:Mio | Million))(?)e(?)\ d +'](https:// regex101的.com/R/1wCKNb/2)?由於要求不明確,很難提供可靠的解決方案。 –

+0

@sniperd真是太遺憾了!有時候很簡單!謝謝 !! – Jannik

回答

1

在您正則表達式中,第一交替組是可選的(?比賽1或次),以及數字匹配部分(*匹配0或更多字符)。

所以,關鍵是讓他們義不容辭:

(^|T|(?i:Mio|Million))(?)e(?)\d+ 
^^        ^^ 

regex demo。將^移動到交替組(增強一位),並用+(或更多次)對\d進行量化。

詳細

  • (^|T|(?i:Mio|Million)) - 備選之一:
    • ^ - 字符串的開始
    • T - 一個T
    • (?i:Mio|Million) - 調節基團匹配在2個替代不區分大小寫的方式:MioMillion
  • (?) - 任選的空間
  • e - 一個e
  • (?) - 任選的空間
  • \d+ - 1或多個數字。
+1

現在我明白了:)非常感謝! – Jannik