【问题标题】:Regex to extract only text after string and before space正则表达式仅在字符串之后和空格之前提取文本
【发布时间】:2013-09-10 01:27:46
【问题描述】:

我想匹配给定字符串后的文本。在这种情况下,以“BookTitle”开头但在第一个空格之前的行的文本:

BookTitle:HarryPotter JK Rowling
BookTitle:HungerGames Suzanne Collins
Author:StephenieMeyer BookTitle:Twilight

期望的输出是:

HarryPotter
HungerGames

我试过:"^BookTitle(.*)",但它给了我匹配 BookTitle: 在行中间的地方,以及空格之后的所有东西。有人帮忙吗?

【问题讨论】:

    标签: regex


    【解决方案1】:

    您的模式中可以包含positive lookbehind

     (?<=BookTitle:).*?(?=\s)
    

    欲了解更多信息:Lookahead and Lookbehind Zero-Width Assertions

    【讨论】:

    • @user1899415 它将在 python 上运行。 Click here
    【解决方案2】:

    这是什么语言?
    请提供一些代码;使用^ 锚点,您绝对应该 匹配开始 与BookTitle 的字符串,所以还有其他问题。
    如果您可以保证从标题中删除所有空格,如您的示例中所示,那么^BookTitle:(\S+) 应该适用于多种语言。
    说明:
    ^ 要求匹配从字符串的开头开始,如您所知。
    \s - *lower*case 表示:匹配白色*s*pace(空格、制表符等) .)
    \S - *upper*case 表示相反的意思:匹配除空格以外的任何内容。
    \w 是另一种可能性:匹配 *w*ord 字符(字母数字加下划线) - 但这会失败例如,如果标题中有撇号。
    如您所知,+ 是一个量词,意思是“至少一个”。
    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      使用“多行”正则表达式选项使用如下内容:

       ^BookTitle:([^\s]+)  
      

      如果没有多行选项,这个:

       (?:^|\n)BookTitle:([^\s]+)
      

      【讨论】:

        猜你喜欢
        • 2018-04-30
        • 2021-12-17
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多