2010-12-06 71 views
2

我需要一個正則表達式來匹配符合以下條件的單詞。我使用它在我的C#程序用於在C#中匹配簡單單詞的正則表達式?

  1. 可以是任何情況下
  2. 應該沒有任何數字
  3. 可能含有 - 和'字,但都是可選
  4. 應以字母開頭

我試過使用表達式^([a-zA-Z][\'\-]?)+$但它不起作用。

這兒有一些是可以接受的幾句話清單

  1. 倫敦(不區分大小寫)
  2. 傑克遜的
  3. 非營利

這裏是不是幾句話清單可接受

  1. 12london(contains一個號碼,不是由字母開始)
  2. -to(不以字母開頭)
  3. 於:(包括:文字,其他任何特殊字符 - 和'是不允許的)
+0

你不想匹配'touché`或`naïve`這樣的詞嗎? – 2010-12-06 14:07:11

回答

2
^[a-zA-Z][-'a-zA-Z]*$ 

它匹配任何以字母字符開頭的單詞,後跟任意數量的字母字符 - 或'。

請注意,只要短劃線是序列中的第一個或最後一個字符,您不需要跳過 - 和'當它位於character [] class中。

請注意,我已經從您的示例中刪除了圓括號 - 如果您不想要capture the input,您可以通過將它們排除在外來獲得更好的性能。

+0

擊敗你編輯,@Jim(或者至少,我非常接近擊敗你...) – Dexter 2010-12-06 12:44:09

+0

+1,但我認爲OP需要這個正則表達式來處理文本,而不是單個單詞。這個正則表達式在倫敦沒有找到任何東西*在倫敦有一個傑克遜在非營利部門工作。* – 2010-12-06 12:45:55

+0

@Lieven - OP包括^和$,所以我認爲OP正在測試一個單詞的聲明,如密碼或類似。有些修改是需要的,但事實並非如此.. – Dexter 2010-12-06 12:48:26

2

試試這個:

^[A-Za-z]+[A-Za-z'-]*$ 
1

首先,試試你的正則表達式對工具如http://www.regextester.com/

您正在測試的字符串都開始和你的模式結束(^表示線的開始,$是結尾),因此不包含兩個空格之間的所有單詞。
您應該使用\ b或\ B。
而不是尋找[a-zA-Z],你可以使用字符類,如'\ D'(非數字)。
讓我知道如果上述工作在您的方案。

\b\D[^\c][a-zA-Z]+[^\c] 

它說:字邊界,沒有數字,沒有控制字符,一個或多個字母較低或大寫字符,沒有下面的控制字符。