2016-07-29 53 views
-2

我知道,只匹配數字字母和空間,我可以使用:Python中使用正則表達式匹配數字,字母,空格和字符括號

re.match(r'[A-Za-z0-9 ]+$', word) 

,但我想也括號,如(){}[]。我將以上正則表達式擴展爲:

re.match(r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$', word) 

但這不起作用。

任何想法是什麼問題?或者是否有我可以參考的簡明正則表達式指南?

回答

4

r'[A-Z][a-z][0-9][ ][(][)][{][}][[][]]]+$'的圖案的序列定義相符: - 大寫ASCII字母

  • [a-z] - 小寫ASCII字母
  • [0-9] - ASCII數字
  • [ ] -

    • [A-Z]的空間
    • [(] - 一個(
    • [)] - 一個)
    • [{] - 一個{
    • [}] - 一個}
    • [[] - 一個[
    • []] - 一個]
    • ]+ - 一個或多個] S(因爲它是一個獨立的量化原子)。
    • $ - 字符串結尾。

      re.match(r'[A-Za-z0-9(){}[\]]+$', word) 
               ^^^^^^^ 
      

      注意(){}[不需要內部逸出:

    它像Aa0(){}[]]

    字符串你只需將它們添加到字符類匹配角色類。該]不具有當字符類開始投入進行轉義:

    re.match(r'[][A-Za-z0-9(){}]+$', word) 
    

    Python demo

  • +0

    供參考:在IDEONE演示,你可以看到,'打印(re.match(R '[] [A-ZA-Z0-9(){}] + $' ,「123 [777] a(A)9(more words)[here]]]] {{{0}}}」))'打印一個匹配,從而匹配字符串中的任意位置*按照您的表達方式按特定順序排列。 –

    +0

    非常感謝!非常清晰,簡潔易懂! –

    0

    在非Java字符類,唯一的特殊字符轉義\
    破折號-,插入符號^,以及右括號]

    那些點 -

    • 如果光標不是在一開始,這是一個文字,
      之初,它的否定。

    • 如果破折號在開頭或結尾是一個文字,中間是
      ,它是一個範圍運算符。

    • 如果右括號位於插入符的開頭或右邊,
      後面沒有右括號,它是一個未封閉的類,是一個錯誤。

    當你想到這一切,你頭將爆炸。

    從保存自己並遵循這些簡單的規則:

    總是逃避字面括號[]無論他們在哪裏。
    不管它在哪裏,總是跳過字面短劃痕-
    始終在所有其他字符的右側放置文字插入符號^

    沒有別的東西需要轉義。

    實例:[a-z(){}\-\[\]^][^a-z(){}\-\[\]^]

    相關問題