25

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

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

期望的输出是:

HarryPotter
HungerGames

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

4

3 回答 3

43

你可以有positive lookbehind你的模式。

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

更多信息:前瞻和后瞻零宽度断言

于 2013-09-10T01:29:50.287 回答
7

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

于 2013-09-10T01:51:26.237 回答
4

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

 ^BookTitle:([^\s]+)  

没有多行选项,这:

 (?:^|\n)BookTitle:([^\s]+)
于 2013-09-10T03:51:31.453 回答