正则表达式只提取字符串之后和空格之前的文本

时间:2013-09-10 01:27:46

标签: regex

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

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

所需的输出是:

HarryPotter
HungerGames

我尝试过:"^BookTitle(.*)"但是它给了我BookTitle:在行中间的匹配,以及在空白之后的所有内容。有人帮忙吗?

3 个答案:

答案 0 :(得分:21)

您可以在模式中使用positive lookbehind

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:3)

使用'multi-line'正则表达式选项可以使用以下内容:

 ^BookTitle:([^\s]+)  

没有多行选项,这个:

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