2012-07-17 43 views
0

I`ve發現這似乎是很奇怪的,我的例子:

import re 
for test_string in ['955-1212', 'ILL-EGAL']: 
if re.match(r'^\d{3}-\d{4}$', test_string): 
    print test_string, 'is a valid US local phone number' 
else: 
    print test_string, 'rejected' 

輸出爲:955-1212是有效的美國本地電話號碼 ILL-EGAL拒絕

究竟什麼是 「^ \ d {3} - \ d {4} $」,因爲當我改變了一些數字,它的輸出改變: 955-1212拒絕 ILL-EGAL拒絕

+0

http://docs.python.org/library/re.html – jdi 2012-07-17 05:13:52

+0

當我運行此我得到「955-1212是有效的美國本地電話號碼 ILL-EGAL拒絕」 - 但只有在我縮進線從「如果」起... – Sean 2012-07-17 05:18:17

回答

2

這是一個regular expression - 它的意思是:

^  from the start of the line 
\d  match any number 
{3} repeated exactly 3 times 
-  followed by a dash 
\d  followed by a number 
{4} repeated exactly four times 
$  followed by the end of the line 

改變表達要麼導致:

  • 另一個正則表達式,可能會或可能不匹配955-1212
  • 無效的正則表達式

您可以瞭解更多關於地方的正則表達式regular-expressions.info

+0

最後的$匹配字符串的末尾 - 因此將其鎖定到最後。這意味着如果您在之前或之後有任何空間,將會失敗。 – Sean 2012-07-17 05:15:59

+0

@肖恩 - 正確 - 我錯過了原來的答案 - 更新並感謝! – 2012-07-17 05:17:15

1

這是一個註冊表恩。

\d匹配0-9{3}三宗先前的模式(所以\d{3}\d\d\d),-只是一個破折號,並且\d{4}就像\d{3}但有一個更\d匹配。 ^$字符分別表示字符串的開始和結束。

正則表達式是或多或少花式搜索和替換:http://docs.python.org/library/re.html

1

^\d{3}-\d{4}$轉換爲:

字符串必須以數字開始(\d)×3({3}),
接着破折號( -),
然後用位結束(\d)×4({4}

ÿ ou可以查看regular expression patterns here

1

這是一個regular expression,它是一種允許您表達文本模式的語言。 python庫爲您提供了測試字符串是否與正則表達式匹配的方法,並且可以從該字符串中抽取部分內容。

在這個特定的圖案:

  • ^意味着模式必須在字符串的開頭相匹配(在字符串的開頭字符可能不被跳過)。
  • \d表示一個數字(從0到9的一個字符)。 **以下{3}意味着三次重複之前的\d--所以匹配三位數字。
  • -匹配 - 字符。
  • \d再次匹配數字... **以下{4}這次意味着四次。
  • $表示該模式必須在stirng結尾處匹配(字符串末尾的字符可能不會被跳過)。如果你改變了3或4到別的

是這樣,那麼模式會匹配不同數量的數字,這可以解釋爲什麼它不能字符串「955-1212」相匹配。例如,如果將4更改爲5,則字符串「955-12123」將匹配,但「955-1212」不匹配。

相關問題