python - 如何在 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*
请参阅正则表达式演示。注意s
:如果不应以任何单词字符开头,您可能希望从单词边界开始匹配, \bs[4-9]\d*
. 在 Python 中,它看起来像r'\bs[4-9]\d*'
.
详情:
s
- 一个s
字符[4-9]
- 一个数字从4
到9
\d*
- 零个或多个数字。
请参阅Python 演示:
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']
推荐阅读
- android - 如何在不单击 RecyclerView 中的按钮的情况下获取 EditText 的输入?
- python - 是否可以在 Pygame 中更改精灵颜色?
- api - 如何注册应用程序?
- javascript - 在输入类型上使用 React 将值 null 转换为 ""
- c# - ItextSharp PDF页眉页脚重复问题
- c++ - “节点”有什么区别
*first" 和 "节点 *第一的”? - android - 如果我不知道activity2何时结束,如何将数据从activity2返回到activity1?
- java - 僵局解决了吗(用餐哲学家)?
- entity-framework - 如何通过更新 EF Core 中的 1 级子实体来添加父实体和 2 级子实体?
- c# - Xamarin.Android 应用程序不请求“WriteExternalStorage”(但代码与“ReadExternalStorage”一起工作正常)