我希望在给定字符串后匹配文本。在这种情况下,以“BookTitle”开头但在第一个空格之前的行的文本:
BookTitle:HarryPotter JK Rowling
BookTitle:HungerGames Suzanne Collins
Author:StephenieMeyer BookTitle:Twilight
所需的输出是:
HarryPotter
HungerGames
我尝试过:"^BookTitle(.*)"
但是它给了我BookTitle:在行中间的匹配,以及在空白之后的所有内容。有人帮忙吗?
答案 0 :(得分:21)
您可以在模式中使用positive lookbehind
。
(?<=BookTitle:).*?(?=\s)
答案 1 :(得分:6)
这是什么语言?
请提供一些代码;使用^
锚点时,您应该仅匹配开始与BookTitle的字符串,因此其他错误。
如果您可以保证从标题中删除所有空格,如示例所示,那么^BookTitle:(\S+)
应该可以使用多种语言。
说明:
如您所知,^
要求匹配从字符串的开头开始
\s
- * lower * case表示:匹配白色* s *步速(空格,制表符等)
\S
- * upper * case表示逆:匹配任何内容但是空格
\w
是另一种可能性:匹配* w * ord字符(字母数字加下划线) - 但是如果标题中有撇号,则会失败。
如你所知,+
是一个量词,意思是“至少有一个”
希望有所帮助。
答案 2 :(得分:3)
使用'multi-line'正则表达式选项可以使用以下内容:
^BookTitle:([^\s]+)
没有多行选项,这个:
(?:^|\n)BookTitle:([^\s]+)