0

我发现了一个对我来说似乎很奇怪的例子:

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 denied ILL-EGAL denied

4

4 回答 4

2

这是一个正则表达式- 它意味着:

^      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等地方了解有关正则表达式的更多信息

于 2012-07-17T05:14:07.047 回答
1

这是一个正则表达式。

\d匹配0-9{3}匹配前一个模式的三个出现(so \d{3}is \d\d\d),-只是一个破折号,\d{4}就像\d{3}但还有一个\d^和字符分别表示字符串的$开始和结束。

正则表达式或多或少是花哨的搜索和替换:http ://docs.python.org/library/re.html

于 2012-07-17T05:14:23.827 回答
1

^\d{3}-\d{4}$翻译为:

字符串必须以数字 ( \d) x 3 ( {3}) 开头,
后跟破折号 ( -),
然后以数字 ( \d) x 4 ( {4})结尾

您可以在此处查看正则表达式模式

于 2012-07-17T05:14:46.157 回答
1

它是一种正则表达式,一种允许您表达文本模式的语言。python 库为您提供了测试字符串是否与正则表达式匹配的方法,并从该字符串中提取片段。

在这个特定的模式中:

  • ^表示模式必须在字符串的开头匹配(不能跳过字符串开头的字符)。
  • \d表示一位数字(0 到 9 之间的一个字符)。** 下面的{3}意思是重复前面的\d三遍——所以匹配三位数。
  • -匹配 - 字符。
  • \d再次,匹配一个数字...... **以下{4}表示这次是四次。
  • $意味着模式必须在搅拌的末尾匹配(不能跳过字符串末尾的字符)。

因此,如果您将 3 或 4 更改为其他值,则该模式将匹配不同数量的数字,这就解释了为什么它无法匹配字符串“955-1212”。例如,如果您将 4 更改为 5,则字符串“955-12123”将匹配,但“955-1212”不匹配。

于 2012-07-17T05:15:10.627 回答