【问题标题】:Regex of a parapgraph starting with specefic text以特定文本开头的段落的正则表达式
【发布时间】:2014-02-19 18:23:34
【问题描述】:

我想使用正则表达式从文本中删除以特定单词开头的段落。 假设我们有 lorem ipsum 文本,我们想删除第一段 (http://en.lipsum.com/feed/html)

我正在使用python,我试过了:

t = r"^Lorem ipsum.*\n\n"
text.replace(t,"")

文本没有发生任何事情。我的问题不是关于 python ,而是关于匹配以某些单词开头的段落的正则表达式。

【问题讨论】:

    标签: regex


    【解决方案1】:

    这很大程度上取决于您对“段落”的定义——它是由空行分隔的行序列吗?大多数正则表达式处理工具都是面向行的,它们逐行处理文本,因此它们可能无法按您预期的那样工作。这也适用于 Python re 库,但它提供了解决方法 - 在您的情况下,re.sub('^Lorem ipsum.*?\n\n', '', text, flags=(re.S | re.M)) 之类的东西应该可以完成这项工作(请注意,text.replace 根本不适用于正则表达式)。

    如果文本足够短,这可行,但对于长文本,您应该使用稍微不同的方法 - 我自己会使用awk,其他人可能会建议使用perl,也可以使用python;像 grepsed 这样更简单的纯正则表达式工具可能在这里不受欢迎。

    【讨论】:

    • 问题是 text.replace() 不适用于正则表达式。
    【解决方案2】:

    如果您的段落中有换行符,您的正则表达式将不起作用(它仅适用于单行段落)。尝试以下正则表达式:^Lorem ipsum[\s\S]*\n\n。见http://regex101.com/r/fF9uZ6

    【讨论】:

    • 你应该添加一个'?'用于惰性匹配而不是贪婪。
    猜你喜欢
    • 2012-06-16
    • 2017-05-09
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多