python - 创建模式来检测序列的出现,以便您可以限制在哪些情况下替换输入字符串中检测到的子字符串

标签 python string replace

这些是输入字符串示例:

#example 1.1
colloquial_hour = "Hola nos vemos a las diez y veinte a m, ten en cuenta que al amanecer tendremos que estar despiertos, porque debemos estar alli a eso de nueve a m o las diez y cuarto a m"
#example 1.2
colloquial_hour = "A mi me parece entre las 10 15 am y las 11 a m, o a las 15 a m aunque quizas a medianoche este bien a eso de las 00:00 a m"
#example 1.3
colloquial_hour = "Puede que a las 10 am. Hay 10 a medias, a m mmm... creo que en 10 estarian para terminar a las 11:00 hs a m 11:59 a m"
#example 1.4
colloquial_hour = "Amediados a mediados del 30 antes de y dia; me parace que hay que estar en casa. Medianamente a, mediados de las 05 a m o cerca de 6 a m."

我尝试过简单的替换,但我认为必须使用正则表达式模式进一步限制这些情况,以便不会进行不需要的替换...

colloquial_hour = colloquial_hour.replace('a m', 'am ')

,并且能够获取该字符串作为输出...

每个示例的正确输出:

#example 1.1
colloquial_hour = "Hola nos vemos a las diez y veinte am, ten en cuenta que al amanecer tendremos que estar despiertos, porque debemos estar alli a eso de nueve am o las diez y cuarto am"
#example 1.2
colloquial_hour = "A mi me parece entre las 10 15 am y las 11 am, o a las 15 am aunque quizas a medianoche este bien a eso de las 00:00 am"
#example 1.3
colloquial_hour = "Puede que a las 10 am. Hay 10 a medias, a m mmm... creo que en 10 estarian para terminar a las 11:00 hs am 11:59 am"
#example 1.4
colloquial_hour = "Amediados a mediados del 30 antes de y dia; me parace que hay que estar en casa. Medianamente a, mediados de las 05 am o cerca de 6 am."

在这种情况下,伪模式是: 一些数字“a m”替换为字符串“am”一个或多个空格、句点、逗号或直接在字符串末尾

还应该考虑可能存在不完整的书面时间表的情况,其中“am”前面会出现 ":"":"": ", "hs", "hs", "hs", "h.s.", “h.s.”“h.s.”“h.s”“h.s”“h.s” ,例如,

input_t = "a las 12: a m"
output = "a las 12: am"

input_t = "a las 12 : a m"
output = "a las 12 : am"

input_t = "a las 12 hs a m"
output = "a las 12 hs am"

input_t = "a las 12:hs a m"
output = "a las 12:hs am"

input_t = "a las 12: hs a m"
output = "a las 12: hs am"

input_t = "a las 12hsa m"
output = "a las 12hs am"

input_t = "a las 12h.sa m"
output = "a las 12h.s am"

input_t = "a las 12 h.sa m"
output = "a las 12 h.s am"

input_t = "a las 12 h.s.a m"
output = "a las 12 h.s. am"

最佳答案

对于第一部分,我制作了这个正则表达式:

out = re.sub(r"([0-9][0-9]\W)a m(\W|\b)", r"\1am\2", colloquial_hour)

它将“am”更改为“am”,保留之前和之后的内容。

对于“hs”或“h.s”我这样做了:

out = re.sub(r"(hs|h.s)(\.)?\W*a m(\W|\b)", r"\1\2 am\3", out)

它在“a m”之前搜索“hs”、“h.s”。您可以组合这两个正则表达式,它们非常相似或按顺序使用它们。

如果有任何问题请告诉我。

关于python - 创建模式来检测序列的出现,以便您可以限制在哪些情况下替换输入字符串中检测到的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73367407/

相关文章:

c# - 从文本文件中删除特定字符串的最后一个实例,而不更改该字符串的其他实例

javascript - 如何使用Javascript替换字符串中的所有 "/"到 "-"

python - 落在网格网格之外的数据点被插值,而网格网格肯定覆盖了这些点

python模拟下面的return_value是什么

mysql - 在 MySQL : string vs float vs 2 ids 中检索唯一记录的最快方法

ios - 使用 UIImage : NSData is not nil, 进行 Base64 转换,但 UIImage 为 nil

python - 查找并编辑文本文件

python - 我已经成功安装了 lightgbm 但无法在 jupyter 中运行

python - django - 基本模板中的静态文件

javascript - 通过JavaScript获取字符串中第二个空格之前和之后的子字符串?