首页 > 解决方案 > 如何在 Python 中选择正则表达式模式

问题描述

我正在学习 Python 3,但我正在努力使用 re 模块获取正则表达式。

这是我的问题:我有字符串

phrase = "s000000000 s1133122 s21 s3 s4 s5212638476234857634 s6 s7 s8 s9000"

并且,使用函数

re.findall(pattern, phrase)

我想提取:

  1. s0-s9 不带附加字符的字符串;
  2. 没有附加字符的 s0-s3 字符串;
  3. s0-s3 带有附加字符的字符串;
  4. 带有附加字符的 s4-s9 字符串。

通过使用以下模式,我设法完成了前三个任务:

  1. pattern = "s[0-9]"
  2. pattern = "s[0-3]"
  3. pattern = "s[0-3]+"

不过,对于最后一个任务,我尝试复制我在第三个任务中所做的并使用

pattern = "s[4-9]+"

但是,而不是得到结果

["s4", "s5212638476234857634", "s6", "s7", "s8", "s9000"]

我明白了

["s4", "s5", "s6", "s7", "s8", "s9"]

这是为什么?我错过了什么?我正在学习的书中的说明指出,加号表示“一个或多个字符”,并且 s[0-3]+ 模式实际上有效,但我无法使其适用于这个特定问题。

标签: pythonregexparsingsubstring

解决方案


你需要使用

s[4-9]\d*

请参阅正则表达式演示注意s:如果不应以任何单词字符开头,您可能希望从单词边界开始匹配, \bs[4-9]\d*. 在 Python 中,它看起来像r'\bs[4-9]\d*'.

详情

  • s- 一个s字符
  • [4-9]- 一个数字从49
  • \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']

推荐阅读