繁体   English   中英

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

[英]Create patterns to detect the occurrence of sequences so that you can restrict in which cases to replace the detected substrings in the input string

这些是输入字符串示例

#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 ')

,并且能够以 output 的形式获得此字符串...

每个示例的正确 output

#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."

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

还应考虑可能存在不完整的书面时间表的情况,其中“am”之前会带有":"":"": "" hs""hs""hs "" hs ""hs" hs” "hs""hs "" hs""hs""hs " ,例如,

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"

这些是其他替换的输入字符串示例

#example 2.1
colloquial_hour = "Algunos y algunas, cada uno y cada una alli, a la una y cuarto o maso menos a la una y media. Aunque uno que otro, termina incluso antes de la una o a la una"
#example 2.2
colloquial_hour = "uno no puede estar seguro de si cerca de la una, las ya cosas estaran listas pero me temo por no tener algunos productos terminados antes de que se de que los tres periodos se den por terminados. Quizas unos pocos de nosotros, quizas dos o tres los tengamos listos para las tres"
#example 2.3
colloquial_hour = "tres y media las cosas deben estar listas, pero seamos sinceros unos pocos de nosotros podrian cargar apurados un par cosas, quizas dos o tres pero no mas, mmmm... para serte sincero no creo que tengamos mas de tres listos antes de las cuatro"

这些将是必须完成的替换,但要获得所需的结果,您应该创建一个类似于前一个的正则表达式,其中替换仅限于满足正则表达式模式的情况。

colloquial_hour = colloquial_hour.replace('cero', '0')
colloquial_hour = colloquial_hour.replace('uno', '1')
colloquial_hour = colloquial_hour.replace('una', '1')
colloquial_hour = colloquial_hour.replace('dos', '2')
colloquial_hour = colloquial_hour.replace('tres', '3')
colloquial_hour = colloquial_hour.replace('cuatro', '4')
colloquial_hour = colloquial_hour.replace('cinco', '5')
#... and more others string numbers written in colloquial Spanish language to replace them with their string equivalent number

每个示例的正确 output

#example 2.1
colloquial_hour = "Algunos y algunas, cada uno y cada una alli, a la 1 y cuarto o maso menos a la 1 y media. Aunque uno que otro, termina incluso antes de la 1 o a la 1"
#example 2.2
colloquial_hour = "uno no puede estar seguro de si cerca de la 1, las ya cosas estaran listas pero me temo por no tener algunos productos terminados antes de que se de que los tres periodos se den por terminados. Quizas unos pocos de nosotros, quizas dos o tres los tengamos listos para las 3"
#example 2.3
colloquial_hour = "3 y media las cosas deben estar listas, pero seamos sinceros unos pocos de nosotros podrian cargar apurados un par cosas, quizas dos o tres pero no mas, mmmm... para serte sincero no creo que tengamos mas de tres listos antes de las 4"

在这种情况下,伪模式是: 字符串的开头或这些选项之一 (?:las|la |antes de |despues de )要替换的单词字符串


仅在检测到模式的情况下,限制这两种用其他字符串替换某些字符串的适当正则表达式是什么。 我一直在考虑一些,但我无法有效地做到这一点。

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

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

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

对于“hs”或“hs”,我这样做了:

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

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


最后一部分涉及小时和

在这种情况下,伪模式是: 字符串的开头或这些选项之一 (?:las|la |antes de |despues de ) 要替换的单词字符串

我想我不知道你想做什么。 如果您提供更多信息,我可以检查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM