在一个随机字符串中,我需要找到一个与给定模式匹配的字符串,并在该字符串之后放置 ;。我想我应该使用 re 来做,但我不太熟悉它。
示例输入:
this is the first part of string 1/32 part this is the second part of string
因此,我需要将 ; 放在 1/32 部分 之后,例如
this is the first part of string 1/32 part; this is the second part of string
我知道我应该使用 re,而且我知道我可能应该使用 re.match,其模式看起来像 [1-1000]/[1 -1000]\spart 但我不确定从这里到哪里去。
编辑:以1/32为例,可以是65/123、1/3、6/7
请您参考如下方法:
您的用例称为替换。这正是 re.sub 的内容功能是为了。
import re
s = "bla 1/6 part bla bla 76/88 part 12345/12345 part bla"
print(s)
s = re.sub(r'(\b\d{1,4}/\d{1,4} part)', r'\1;', s)
print(s)
这个的输出是
bla 1/6 part; bla bla 76/88 part; 12345/12345 part bla
注意 ; 最后一次出现 part 之后的缺失。
我用了{} quantifiers将分数的分子和分母限制为 4 位十进制数字,这是您提到的 [1-1000] 表示法。用 1?\d{1,3} 可以更好地近似它(但这也不完全相同,它还允许例如 1999/1999)< sup>[1].
[1] 附注作为tripleee commented ,1到1000之间的十进制数的精确正则表达式是[1-9]([0-9][0-9]?)?|1000,看起来有点复杂,但是如果您将唯一的 4 位数字 1000 分开并在 1 到 3 位数字部分使用一对多余的括号,则构建模式会变得很明显:[1-9]([0 -9]([0-9])?)?。另一种选择是对 [0-9] 使用字符类快捷方式 \d,结果是 [1-9]\d{0,2}| 1000。
编辑:
- 合并匹配分组。
- 在分子前添加 anchor 。
