我有一个看起来像的字符串:
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”之后 - 但总是发生在“所有者:”之后。
有关如何提取地址的任何想法?
提前致谢。
答案 0 :(得分:1)
\G
匹配字符串的开头或上次成功匹配后的位置。
您的方法有三个原因无效:
Regex.Match
仅搜索一次。如果有的话,您必须使用Regex.Matches
来获得多个结果。
如果更改模式,搜索将从字符串的开头重新开始。这就是为什么你获得&#34;所有者:&#34;因为\G
匹配字符串的开头。
无论如何,因为你的模式在Smith
之后没有吃换行符(它只是一个测试,一个没有&的前瞻) #39; t消耗字符),点将在此换行符的位置失败。
可能的解决方法:
将Regex.Match
方法与描述两行的模式一起使用并提取捕获组:
(?m)^Owner:(?<owner>.*?)\r?\n(?<addr>.*?)$