2015-12-31 24 views
0

下面是我將文件導入正則表達式中的字符串匹配pattern

  • 東切斯特頓(劍橋)
  • 紐約(美國)
  • 孩子(家長)時間用樣品的話

因此,這裏的業務規則:

  1. 杉木ST詞應該是至少3個字符長(樂子)
  2. 允許空間,但它是無效的,如果這裏只有空間(樂東切斯特頓)
  3. 這個詞的另一部分是在(someword)
  4. (someword)是可選
  5. 如果(someword)是有它的最小長度是3,和空格也是允許的。

我在用下面的表達式一定程度上實現了這一點:

^[a-zA-Z ]{1,}\([a-zA-Z ]{1,}\)$ 
  1. 現在我要確保這是正確的表達。有沒有辦法檢查自動化檢查多個組合來驗證我的表情?

  2. 我怎樣才能實現可選部分(點號4),它分鐘i是否通過(somedata)還是不用於檢查第一部分。

而且提取的數據 '()'

\((.*?)\) 
+2

測試它在這裏https://regex101.com/ –

+1

'{1,}'匹配一次或多次,但你說你需要在至少3個字符,所以應該是'{3,}'。對於可選部件,使用'?'。請注意'(...)'表示一個組。要匹配括號,您需要將它們轉義:'\('和'\)'。還要注意,你可以使用諸如'\ w'(單詞字符)和'\ s'(空白字符)之類的字符類來代替明確的範圍。您還可以在第一部分和第二部分之間使用'\ s *'(0或更多空白字符)來允許(可選)空格。 –

+0

雖然您可以使用regex101執行此任務,但請注意,該網站不支持.NET正則表達式語法。使用regexhero.net或regexstorm.net。現在,你的要求並不那麼清楚:分鐘是多少? 3的長度?第一個字還是所有的子部分?爲了測試正則表達式,你應該自己考慮可能的輸入字符串類型,沒有辦法自動創建測試字符串。內容驅動正則表達式,反之亦然。嘗試此正則表達式:['^ [AZ] +(= [AZ] {3,}?)(?:?\ p {ZS} \((= [AZ] {3,...})[AZ] + \))嗎?\ r?$'](http://goo.gl/bkqHDp)。 –

回答

2

我認爲你是幾乎沒有。我試了一下。這是否符合您的所有要求?

^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$ 

https://regex101.com/r/yE9lB0/2

我所做的第二部分可選,將其置於括號之間,添加一個問號結尾:(myoptionalexpression)?

0

我已經採取了看看這裏張貼的答案。

^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$ 

這將對陣

  • 允許的空間,但它是無效的,如果這裏只有空間(l.i東切斯特頓)

只有空的空間應該已經匹配。

除此之外描述「字符」可能會有點模糊。因此我假設單詞字符\w是你的意思。 (在C尖銳\w應包括Unicode字符等ü爲好。想到Münster (Germany)爲例。

新的正則表達式應該是這樣的:

^\s*(?:\w{3,}\s*)+(?:\(\s*(?:\w{3,}\s*)+\))?\s*$ 

例子在這裏: https://regex101.com/r/gS7kG8/3

注意,regex101頁作品用PHP,Python和JS正則表達式,它不會給的情況下,準確的結果的C#(\w在php顯然不匹配unicode例如)