下面有一个字符串,下面是我试图使用VB.NET获取字符串中所有HotelNames的示例。
这是我的代码:
Dim thepage As String = postreqreader.ReadToEnd
Dim r As New Regex("""HotelName"":"".*""")
Dim matches As MatchCollection = r.Matches(thepage)
For Each hotelname As Match In matches
ListBox1.Items.Add(hotelname.Value.Split("""").GetValue(3))
Next但是,这只会将第一个HotelName添加到我的ListBox中。有什么想法可以让我的每个HotelName匹配进入我的列表箱吗?耽误您时间,实在对不起!
短弦:
“"HotelNameShortAvailabilityRecommendations":"Homewood Suites by H.”、“HotelName”:“HotelNameShort”:“Arlington骑士”、“HotelName”、“HotelNameShort”:“Arlington骑士”、“Arlingto "HotelNameShortAvailabilityRecommendations":"Knights .”、“HotelName”:“霍华德·约翰逊快捷酒店--阿灵顿公园/六旗”、“HotelNameShort”:“霍华德·约翰逊快车.”、“"HotelNameShortAvailabilityRecommendations":"Howard约翰逊快车.”、“”HotelNameShortAvailabilityRecommendations“:”Howard约翰逊快车.““"HotelNameShortAvailabilityRecommendations":"Super 8 Arlington/SW",”HotelName 8 Arlington/SW",“HotelNameShort”:“Super8 Arlington/SW”,
发布于 2012-11-07 23:54:08
你的.*太贪婪了。这意味着它消耗了尽可能多的资源,所以您的第一次匹配将接受整个字符串,直到最后一个"。然后在"拆分一个匹配项(实际上包含所有酒店名称),并取出第三个元素。(看看hotelname.Value.Split("""").Count,它将是巨大的)
诀窍是要么使重复变得不贪婪,要么更好的是,不允许重复使用"。
"""HotelName"":""([^""]*)""现在,在"和"之间,我们只是重复非引号字符,所以我们永远不能超过第一个结尾引号。这本身就可以解决您的问题,但我也添加了这些括号。它们将不匹配任何实际括号,而是创建一个捕获组,这使得检索酒店名称更加容易:
For Each hotelname As Match In matches
ListBox1.Items.Add(hotelname.Groups[1])对于每一组括号,它们内部匹配的内容将被放入match.Groups的一个元素中,从左到右计算开括号。regex匹配已经完成了获取单个值所需的所有工作,那么为什么要执行第二个拆分步骤。
https://stackoverflow.com/questions/13280155
复制相似问题