如何在 Python 中选择正则表达式模式
How to choose a regex pattern in Python
我正在学习 Python 3,但我正在努力使用 re 模块获取正则表达式。
这是我的问题:我有字符串
phrase = "s000000000 s1133122 s21 s3 s4 s5212638476234857634 s6 s7 s8 s9000"
并且,使用函数
re.findall(pattern, phrase)
我要提取:
- 没有附加字符的 s0-s9 字符串;
- 没有附加字符的 s0-s3 个字符串;
- 带有附加字符的 s0-s3 个字符串;
- 带有附加字符的 s4-s9 字符串。
我使用以下模式成功完成了前三项任务:
pattern = "s[0-9]"
pattern = "s[0-3]"
pattern = "s[0-3]+"
不过,对于最后一个任务,我尝试复制我在第三个任务中所做的并使用了
pattern = "s[4-9]+"
但是,不是得到结果
["s4", "s5212638476234857634", "s6", "s7", "s8", "s9000"]
我明白了
["s4", "s5", "s6", "s7", "s8", "s9"]
这是为什么?我错过了什么?我正在学习的书上的说明指出加号表示“一个或多个字符”,并且 s[0-3]+ 模式实际上有效,但我无法使其适用于这个特定问题。
你需要使用
s[4-9]\d*
见regex demo。 注意:如果 s
前面不应有任何单词字符 \bs[4-9]\d*
,您可能希望从单词边界开始匹配。在 Python 中,它看起来像 r'\bs[4-9]\d*'
。
详情:
s
- 一个 s
字符
[4-9]
- 从 4
到 9
的数字
\d*
- 零个或多个数字。
参见Python demo:
import re
rx = r"s[4-9]\d*"
text = "s000000000 s1133122 s21 s3 s4 s5212638476234857634 s6 s7 s8 s9000"
print( re.findall(rx, text) )
# => ['s4', 's5212638476234857634', 's6', 's7', 's8', 's9000']
我正在学习 Python 3,但我正在努力使用 re 模块获取正则表达式。
这是我的问题:我有字符串
phrase = "s000000000 s1133122 s21 s3 s4 s5212638476234857634 s6 s7 s8 s9000"
并且,使用函数
re.findall(pattern, phrase)
我要提取:
- 没有附加字符的 s0-s9 字符串;
- 没有附加字符的 s0-s3 个字符串;
- 带有附加字符的 s0-s3 个字符串;
- 带有附加字符的 s4-s9 字符串。
我使用以下模式成功完成了前三项任务:
pattern = "s[0-9]"
pattern = "s[0-3]"
pattern = "s[0-3]+"
不过,对于最后一个任务,我尝试复制我在第三个任务中所做的并使用了
pattern = "s[4-9]+"
但是,不是得到结果
["s4", "s5212638476234857634", "s6", "s7", "s8", "s9000"]
我明白了
["s4", "s5", "s6", "s7", "s8", "s9"]
这是为什么?我错过了什么?我正在学习的书上的说明指出加号表示“一个或多个字符”,并且 s[0-3]+ 模式实际上有效,但我无法使其适用于这个特定问题。
你需要使用
s[4-9]\d*
见regex demo。 注意:如果 s
前面不应有任何单词字符 \bs[4-9]\d*
,您可能希望从单词边界开始匹配。在 Python 中,它看起来像 r'\bs[4-9]\d*'
。
详情:
s
- 一个s
字符[4-9]
- 从4
到9
的数字
\d*
- 零个或多个数字。
参见Python demo:
import re
rx = r"s[4-9]\d*"
text = "s000000000 s1133122 s21 s3 s4 s5212638476234857634 s6 s7 s8 s9000"
print( re.findall(rx, text) )
# => ['s4', 's5212638476234857634', 's6', 's7', 's8', 's9000']