3 回答
TA贡献1772条经验 获得超8个赞
该h替代匹配h的heures和heures?替代甚至没有测试。交换替代方案可以解决问题,但是最好使用可选的非捕获组(请参见下面的解决方案)。
建议不要在模式中的捕获括号中删除它们(或者,如果要使用替换,则将其转换为非捕获组)。
此外,该([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
TA贡献1821条经验 获得超5个赞
更改的顺序heures和h括号,像这里面:
[0-9]+\s?(heures?|h)([0-9]+)? 应该管用。
在情况下(h|heures?),你是说,如果h没有找到,然后看是否heures存在。无论何时heures存在,事物h都会始终存在(它的第一个字符heures)。因此,您需要更改顺序。您应该先搜索heures,如果不存在,则搜索h。因此,替换 (h|heures?)为即可(heures?|h)解决问题。
TA贡献1844条经验 获得超8个赞
您需要切换交替,因为第一部分中的h首先被匹配。
例如4heures,您的正则表达式匹配一个或多个数字\d+。然后在交替中(h|heures?)它可以匹配hfrom heures。在替换匹配的4h将被替换#hour导致#houreures
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)
添加回答
举报
