正则表达式\ G搜索不起作用

时间:2017-09-18 21:16:44

标签: regex vb.net

我有一个看起来像的字符串:

Dim strTestString = "\nOwner: John Smith\n123 Main St\n"

我解析出这个名字没有任何问题:

Dim mc As Match = Regex.Match(strTestString, "(?<=\\nOwner: )(.*?)(?=\\n)")
Console.WriteLine(mc.Value.ToString())

我的问题是当我尝试获取地址(123 Main St)时。我正在尝试使用\ G元字符。当我使用以下内容时,我返回一个空字符串:

mc = Regex.Match(strTestString, "\G(.*?)(?=\\n)")
Console.WriteLine(mc.Value.ToString())

地址不会总是在第二个“\ n”之后 - 但总是发生在“所有者:”之后。

有关如何提取地址的任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

当您搜索多个匹配项时,

\G匹配字符串的开头或上次成功匹配后的位置。

您的方法有三个原因无效:

  • Regex.Match仅搜索一次。如果有的话,您必须使用Regex.Matches来获得多个结果。

  • 如果更改模式,搜索将从字符串的开头重新开始。这就是为什么你获得&#34;所有者:&#34;因为\G匹配字符串的开头。

  • 无论如何,因为你的模式在Smith 之后没有换行符(它只是一个测试,一个没有&的前瞻) #39; t消耗字符),点将在此换行符的位置失败。

可能的解决方法:

Regex.Match方法与描述两行的模式一起使用并提取捕获组:

(?m)^Owner:(?<owner>.*?)\r?\n(?<addr>.*?)$