为了账号安全,请及时绑定邮箱和手机立即绑定

替换字符串中的问题

替换字符串中的问题

ibeautiful 2021-04-26 08:09:10
我有一个替换字符串的问题:我想将所有外观从2h / 2h / 2 heure / 2heure / 2 heures / 2heures更改为#hour。我试过了:text = "I should leave the house at 16h45 but I am late and I should not be arriving between 2 h or 3h or maybe 4heures"hour = re.compile(r'[0-9]+\s?(h|heures?)([0-9]+)?')replaces = hour.sub('#hour', text)print(replaces)输出:我应该在#hour离开家,但是我迟到了,我不应该在#hour或#hour或#houreures之间到达良好的输出:我应该在#hour离开家,但是我迟到了,我不应该在#hour或#hour或#hour之间到达我该如何解决#houreures这个问题?
查看完整描述

3 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

h替代匹配hheuresheures?替代甚至没有测试。交换替代方案可以解决问题,但是最好使用可选的非捕获组(请参见下面的解决方案)。

建议不要在模式中的捕获括号中删除它们(或者,如果要使用替换,则将其转换为非捕获组)。

此外,该([0-9]+)?模式可以简化为[0-9]*

您可以使用

[0-9]+\s?h(?:eures?)?[0-9]*

正则表达式演示

细节

  • [0-9]+ -一个或多个数字

  • \s? -1或0个空格

  • h-h一封信

  • (?:eures?)?-与1个或0个匹配项发生eure或匹配的可选非捕获组eures

  • [0-9]* -0或更多数字。

参见Python演示

import re

text = "I should leave the house at 16h45 but I am late and I should not be arriving between 2 h or 3h or maybe 4heures"

hour = re.compile(r'[0-9]+\s?h(?:eures?)?[0-9]*')

replaces = hour.sub('#hour', text)

print(replaces)

# => I should leave the house at #hour but I am late and I should not be arriving between #hour or #hour or maybe #hour



查看完整回答
反对 回复 2021-05-11
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

更改的顺序heuresh括号,像这里面:

[0-9]+\s?(heures?|h)([0-9]+)? 应该管用。

在情况下(h|heures?),你是说,如果h没有找到,然后看是否heures存在。无论何时heures存在,事物h都会始终存在(它的第一个字符heures)。因此,您需要更改顺序。您应该先搜索heures,如果不存在,搜索h。因此,替换 (h|heures?)为即可(heures?|h)解决问题。


查看完整回答
反对 回复 2021-05-11
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您需要切换交替,因为第一部分中的h首先被匹配。

例如4heures,您的正则表达式匹配一个或多个数字\d+。然后在交替中(h|heures?)它可以匹配hfrom heures。在替换匹配的4h将被替换#hour导致#houreures

[0-9]+\s?(heures?|h)([0-9]+)?

import re


text = "I should leave the house at 16h45 but I am late and I should not be arriving between 2 h or 3h or maybe 4heures"

hour = re.compile(r'[0-9]+\s?(heures?|h)([0-9]+)?')

replaces = hour.sub('#hour', text)

print(replaces)


查看完整回答
反对 回复 2021-05-11
  • 3 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信