在随机字符串中,我需要找到与给定模式匹配的字符串,并将;
放在此字符串之后。我想我应该使用re
来做,但我并不熟悉它。
示例输入:
this is the first part of string 1/32 part this is the second part of string
因此,我需要将;
放在1/32 part
之后,例如
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
答案 0 :(得分:4)
您只需使用re
模块中的re.match
和re.sub
以及以下正则表达式
import re
my_str = 'this is the first part of string 1/32 part this is the second part of string'
my_regex = r'(\d+/\d+\s+part)'
if re.match(my_regex, my_str):
print(re.sub(my_regex, r'\1,', my_str)) # this will print: 1/32 part,
# ...
如果需要多行来匹配相同的正则表达式,那么你需要为正则表达式添加一些额外的标志。请参阅here此类标记的列表。
您可以看到正则表达式here
快速替换(可能有更好的方法)是匹配所需匹配部分之前和之后的部分,并执行以下操作:
import re
my_str = 'this is the first part of string 1/32 part this is the second part of string'
my_regex = r'(.*)(\s+\d+/\d+\s+part)(.*)'
condition = re.match(my_regex, my_str)
if condition:
part = re.sub(my_regex, r'\2,', my_str)
x = condition.group(1) + part + condition.group(3)
print(x)
将输出修改后的字符串:
这是字符串1/32部分的第一部分,这是第二部分 串
具有上述所有功能的简单单行函数将是:
import re
def modify_string(my_str, my_regex):
return re.sub(my_regex, r'\1,', my_str)
if __name__ == '__main__':
print(modify_string('first part of string 1/32 part second part of string', r'(\d+/\d+\s+part)'))
但我建议保持这个状况。 以防万一。。
答案 1 :(得分:4)
您的用例称为替换。这正是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
) [1] 。
[1]
ps 作为tripleee commented,十进制数的精确正则表达式从1到1000是[1-9]([0-9][0-9]?)?|1000
,它看起来有点复杂,但如果你将只有4位数字1000
,并在1到3位数的部分使用多余的括号:[1-9]([0-9]([0-9])?)?
。另一种选择是使用\d
的字符类快捷方式[0-9]
,结果为[1-9]\d{0,2}|1000
。
修改强>