regex 如何在Python中从字符串中删除子集

gstyhher  于 2023-06-30  发布在  Python
关注(0)|答案(2)|浏览(98)

我有以下类型的文本:

dbt とは何をするツールなのか?2022.02.09data build tool|dbt|Tech|こんにちは、ソフトウェアエンジニアの冨田です。

我想删除所有出现YYYY.MM.DD的所有方式通过'技术|”包括在内。
所以我希望最后的字符串看起来像这样:

dbt とは何をするツールなのか?こんにちは、ソフトウェアエンジニアの冨田です。

我做了下面的代码,但它无法删除'技术|':

text = re.sub(r'\d{4}\.\d{2}\.\d{2}(?=.*Tech|)', '', text)

我将感激你的善意建议。

ujv3wf0j

ujv3wf0j1#

匹配Tech|,而不是将其Assert到右侧,转义管道以按字面意思匹配它,并使用非贪婪.*?匹配Tech|的第一次出现
字边界\b防止部分字匹配。

import re
 
s = "dbt とは何をするツールなのか?2022.02.09data build tool|dbt|Tech|こんにちは、ソフトウェアエンジニアの冨田です。"
pattern = r"\d{4}\.\d{2}\.\d{2}.*?\bTech\|"
print(re.sub(pattern, '', s))

输出量

dbt とは何をするツールなのか?こんにちは、ソフトウェアエンジニアの冨田です。

请参见Python demo

yfwxisqw

yfwxisqw2#

Tech|用作分隔符,以便匹配的内容位于日期之间
和定界符。如果找不到Tech|或者这个文字可能会改变,这就有风险。
请注意,分隔符的任何缺陷或缺失部分都将导致
遍历所有Unicode字符以查找下一个分隔符的匹配
把他们也消灭了
如果这是一个1-关闭,那么没有问题。
日期后面的ASCII字符似乎是更好的分隔符。
另一种方法是在日期后面加上ASCII分隔符。

\d+\.\d+\.\d+(?:\s*[\x21-\x7e]+)*\s?

代码

text = re.sub(r'\d+\.\d+\.\d+(?:\s*[\x21-\x7e]+)*\s?', '', text)

您也可以保留Tech|分隔符,但将.*?替换为
ASCII和白色,以便在发生更改时不会过冲。

\d+\.\d+\.\d+(?:\s*[\x21-\x7e]+)*?\s*Tech\|

相关问题