ret=re.search(r'\d*','hello999')
print(ret.group())
结果不符合预期:999
代码 | 说明 |
---|---|
. | 匹配除换行符(n, r)之外的任意 单个 字符。 |
\w | 匹配大小写字母、或数字、或下划线。等价于[A-Za-z0-9_]。 |
\W | 跟小写的 w 正好相反。等价于1。 |
\s | 匹配任意的空白字符,包括空格、制表符、换页符等。等价于[fnrtv]。 |
\S | 跟小写的 s 正好相反。等价于2。 |
\d | 匹配一个数字字符,等价于[0-9]。 |
\D | 匹配一个非数字字符,等价于3。 |
\b | 匹配一个单词的边界,也就是单词和空格的位置。 例如, 'erb' 可匹配 'never' 中的 'er',但不匹配 'verb' 中的 'er'。 |
^ | 匹配输入字符串开始位置。 |
$ | 匹配输入字符串的结束位置。 |
[] | 匹配[]中列举的字符。 |
代码/语法 | 说明 |
---|---|
* | 重复匹配前面的子表达式零次或更多次 |
+ | 重复匹配前面的子表达式一次或更多次 |
? | 重复匹配前面的子表达式零次或一次 |
{n} | 重复匹配前面的子表达式n次 |
{n,} | 重复匹配前面的子表达式n次或更多次 |
{n,m} | 重复匹配前面的子表达式n到m次 |
ret=re.search(r'\d+','hello999')
print(ret.group())
re.search 扫描整个字符串并返回 第一个 成功 的匹配。
从字符串最左边开始匹配,只要匹配到第一个,那就返回,不管其它。
ret=re.search(r'd*','hello999')
print(ret.group())
你用了一个 r'd*', 在此表示字符串 d 出现零次或多次,记住出现零次这个概念,那就是一个空字符。你的正则就匹配了 hello 最左边的一个空字符。
当然,我明白题主的意思是为了匹配数字字符,但是很遗憾,只有 \d 才等价与 [0-9], d 仅仅是字符串 d 而已。
要想表达实现一次或多次,那么你得使用 + ,
所以最终的表达式应该是 r'、d+'。
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
首先,search的定义如下:

其次,你写的这个正则的匹配情况如下:

所以,第一个匹配的是第一个字母h之前的位置,所以你用group()去获取数据,当然返回空字符串