Example 1:

input_text = "A las 19:30 de la tarde salimos!! hay que tener cuidado porque a eso de las 19:30pm de la tarde pasan muchos autos, ademas es importante llegar alla antes de las 20 30 hs, ya que a las 21:00 pm cierran alg1s negocios, sin embargo el cine esta abierto hasta las 23:30 pm de la noche"

我需要的output美元是:

input_text = "A las 19:30 pm salimos!! hay que tener cuidado porque a eso de las 19:30pm pasan muchos autos, ademas  es importante llegar alla antes de las 20 30 hs, ya que a las 21:00 pm cierran alg1s negocios, sin embargo el cine esta abierto hasta las 23:30 pm"

Example 2:

"Tras pasar las horas de la tarde a las 19:30 de la noche salimos de la casa juntos!! es importante llegar alla antes de las 20:30 pm de la noche, ya que a las 21:00 pm de la noche cierran alg1s negocios, sin embargo el cine esta abierto hasta la 21:00 de la noche"

我需要的output美元是:

"Tras pasar las horas de la tarde a las 19:30 pm salimos de la casa juntos!! es importante llegar alla antes de las 20:30 pm, ya que a las 21:00 pm de la noche cierran alg1s negocios, sin embargo el cine esta abierto hasta la 21:00 pm"

如果"pm""am"之后显示为"en la noche""de la tarde",则

XX:XX amXX:XX pmXX:XXamXX:XXpm,然后是"en la noche""de la tarde"

.replace("en la noche", "")
.replace("de la tarde", "")

如果它说"en la noche""de la tarde",但前面没有"pm""am",那么...

XX:XX,然后是"en la noche""de la tarde"

.replace("en la noche", "pm")
.replace("de la tarde", "pm")

问题是,我不知道需要在原始字符串中替换多少次,不需要替换多少次(甚至可能会输入一个INPUT_STRING,因为没有匹配的模式,所以无法进行替换)

在这些示例中,仅表示"en la noche""de la tarde"的情况,但必须实现相同功能的其他子字符串将是例如"por la noche""por la tarde""de la noche""del atardecer""entrada la noche""entrada la tarde"等...

将替换限制为仅出现这些模式的情况的正则表达式是什么?

推荐答案

我把算法分成两部分:

import re

words = r"(?:en la noche|de la tarde|de la noche)"

s = "A las 19:30 de la tarde salimos!! hay que tener cuidado porque a eso de las 19:30pm de la tarde pasan muchos autos, ademas es importante llegar alla antes de las 20 30 hs, ya que a las 21:00 pm cierran alg1s negocios, sin embargo el cine esta abierto hasta las 23:30 pm de la noche"

pat1 = re.compile(rf"(\d+[\s:]+\d+)\s*{words}")
pat2 = re.compile(fr"(\d+[\s:]+\d+\s*pm)\s*{words}")

s = pat1.sub(r"\1 pm", s)
s = pat2.sub(r"\1", s)
print(s)

打印:

A las 19:30 pm salimos!! hay que tener cuidado porque a eso de las 19:30pm pasan muchos autos, ademas es importante llegar alla antes de las 20 30 hs, ya que a las 21:00 pm cierran alg1s negocios, sin embargo el cine esta abierto hasta las 23:30 pm

编辑:组合单词:

import re
from itertools import product

words1 = ["tardecita", "atardecer", "tarde", "anochecer", "trasnoche", "noche"]
words2 = [
    "en la",
    "de la",
    "por la",
    "entrada la",
    "entrado la",
    "de el",
    "en el",
    "por el",
    "entrada el",
    "entrado el",
]

words = (
    "(?:" + "|".join(f"{w1} {w2}" for w1, w2 in product(words2, words1)) + ")"
)

s = "Tras pasar las horas de la tarde a las 19:30 de la noche salimos de la casa juntos!! es importante llegar alla antes de las 20:30 pm de la noche, ya que a las 21:00 pm de la noche cierran alg1s negocios, sin embargo el cine esta abierto hasta la 21:00 de la noche"

pat1 = re.compile(rf"(\d+[\s:]+\d+)\s*{words}")
pat2 = re.compile(fr"(\d+[\s:]+\d+\s*pm)\s*{words}")

s = pat1.sub(r"\1 pm", s)
s = pat2.sub(r"\1", s)
print(s)

打印:

Tras pasar las horas de la tarde a las 19:30 pm salimos de la casa juntos!! es importante llegar alla antes de las 20:30 pm, ya que a las 21:00 pm cierran alg1s negocios, sin embargo el cine esta abierto hasta la 21:00 pm

Python相关问答推荐

对Numpy函数进行载体化

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

将数据框架与导入的Excel文件一起使用

用Python解密Java加密文件

两个pandas的平均值按元素的结果串接元素.为什么?

无法使用requests或Selenium抓取一个href链接

如何获取numpy数组的特定索引值?

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如果满足某些条件,则用另一个数据帧列中的值填充空数据帧或数组

为什么常规操作不以其就地对应操作为基础?

Numpyro AR(1)均值切换模型抽样不一致性

以异步方式填充Pandas 数据帧

ModuleNotFoundError:Python中没有名为google的模块''

为什么Visual Studio Code说我的代码在使用Pandas concat函数后无法访问?

多索引数据帧到标准索引DF

时间戳上的SOAP头签名无效

有没有一种方法可以根据不同索引集的数组从2D数组的对称子矩阵高效地构造3D数组?

将时间序列附加到数据帧

在Pandas 中,有没有办法让元组作为索引运行得很好?