编写正则表达式以获取特定字符后的所有单词

2024-06-01 01:46:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,其中所有行的格式都是title - news_source。我想用(空白)替换标题后面的所有字符

到目前为止,我只有\s-\s的模式,但不知道为新闻来源编写什么模式

有人能指导我完成为新闻来源编写正则表达式的过程吗。谢谢


Tags: 文件标题sourcetitle过程格式模式字符
2条回答

您可以匹配\s-\s.*并替换为空字符串

\s也可以匹配换行符。如果要匹配不带换行符的空白字符,还可以使用[^\S\r\n]-[^\S\r\n].*

import re    

s = ("title - news_source\n"
            "Airbnb stock has 15% upside after an 'impressive' earning report, says BofA - Business Insider")
result = print(re.sub(r"\s-\s.*", " ", s))

输出

title
Airbnb stock has 15% upside after an 'impressive' earning report, says BofA

如果字符串开头至少应有一个非空白字符\S,则可以使用捕获组,并在替换中使用组后跟空格

re.sub(r"^(\S.*)[^\S\r\n]-[^\S\r\n].*", r"\1 ", s)

Regex demoPython demo

如果只想匹配news_source,可以执行以下操作:

\w+_\w+
  • \w:将匹配任何字母数字字符
  • \u:将匹配下划线(\u0)
  • +:将确保至少有一个此类字符的

因此正则表达式将匹配包含以下内容的任何字符串:

at least one alphanumeric character, followed by an underscore, followed by at least one aplhanumeric character.

但是,我想它并不总是包含下划线。 如果您只想匹配“-”后面的任何内容,但只想获得空格后面的内容,则可以创建一个捕获组

\-\s(w+)

这将匹配- 之后的任何内容,并且捕获所有字母数字字符,如果至少有一个字母数字字符! 在您的情况下,它将与- news_source匹配,并捕获news_source

但是,如果它是一个更复杂的字符串,例如:Title - new source _ with : some , very weird "format",并且您确实希望在- 之后获取所有内容,那么您将使用:

\-\s(.+)

它将捕获:new source _ with : some , very weird "format"。 其中.将匹配除换行符(\n\r)之外的任何字符

我不确定您在python中使用什么来计算正则表达式,但您应该检查如何从匹配中提取捕获组

编辑:

在你的反应之后,我现在看到你想要简单地去除源代码。那是我的错

在这种情况下:

(.+)\s-

这将捕获标题(在 -之前的所有内容)。 我希望以上所有表达的解释足以理解这个表达的确切含义。简而言之:它捕获模式 -之前的所有内容

我将把剩下的例子也留在这里,除非人们想让我把它们删除以便于澄清

相关问题 更多 >