【问题标题】:Writing a regular expression for getting all words after a specific charcter编写正则表达式以获取特定字符之后的所有单词
【发布时间】:2021-02-27 09:07:52
【问题描述】:

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

到目前为止,我只有 \s-\s 的模式,但不知道为 news_source 写什么模式。

谁能指导我完成为 news_source 编写正则表达式的过程。谢谢!

【问题讨论】:

  • re.sub(r'(\s-\s.*)', ' ', s) ?
  • 那个表达有效!谢谢!

标签: python regex


【解决方案1】:

您可以匹配\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 demo | Python demo

【讨论】:

    【解决方案2】:

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

    \w+_\w+
    
    • \w :将匹配任何字母数字字符
    • _:将匹配下划线 (_)
    • +:将确保必须有至少一个这样的字符。

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

    至少一个字母数字字符,后跟一个下划线,后跟至少一个字母数字字符。

    不过,我猜它并不总是包含下划线。 如果你只是想匹配'-'后面的任何东西,但只想获取空格后面的东西,你可以创建一个捕获组

    \-\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-
    

    这将捕获标题( - 之前的所有内容)。 我希望对以上所有表达式的解释足以理解这个表达式到底是做什么的。简而言之:它捕获了模式 - 之前的所有内容。

    除非人们希望我为了清楚起见而删除它们,否则我也会将其余示例留在此处。

    【讨论】:

    • "Airbnb stock has 15% upside after an 'impressive' earning report, says BofA - Business Insider"。这是文件中的示例文本行。我想去掉BofA之后的所有字符。
    猜你喜欢
    • 2017-02-03
    • 2014-09-14
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多