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条经验 获得超4个赞
更改的顺序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?)
它可以匹配h
from 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)
添加回答
举报