无法从字符串中过滤内容

时间:2018-07-12 19:55:09

标签: c# regex

我正在尝试通过以下字符串获取内容Camp de Futbol d'Aixovall

//<![CDATA[        

//document.observe("dom:loaded", function() {mapsLoad()});
Event.observe(window, 'load', mapsLoad);   

function loadMarkers()
{
    setMarker(
      "Camp de Futbol d'Aixovall", 
      42.476449269018,
      1.487649679184,
      null,
      null,
      1996,
      null, 
      null, 
      null, 
      null,
      "/venues/andorra/devk-arena/v1996/"
    );
}

 //]]>

我尝试了以下正则表达式模式:loadMarkers[^\{]+(.*})

但是这行不通,有人可以帮助我吗?

更新

var name = System.Text.RegularExpressions.Regex
            .Match(c, @"(?<=function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*")[^ "]+(?=")").Groups[1].Value;

2 个答案:

答案 0 :(得分:2)

对于发布的确切字符串,可以使用以下正则表达式

function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*"([^"]+)"

并提取第1组的值。参见regex demo

详细信息

  • function\s+loadMarkers\(-匹配function,1个空格,loadMarkers(
  • [^()]*-匹配()之外的任何0+个字符
  • \)-一个)字符
  • (?:\r?\n.*){2}-将换行符和整行匹配两次(以这种方式跳过两行)
  • \r?\n-换行符
  • \s*-超过0个空格
  • "-双引号
  • ([^"]+)-组1:除"以外的任何1个以上的字符
  • "-双引号。

在C#中,代码看起来像

var pattern = @"function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*""([^""]+)""";
var name = System.Text.RegularExpressions.Regex.Match(c, pattern).Groups[1].Value;

结果将为Camp de Futbol d'Aixovall。参见this regex demo

如果出于某种原因要获得整个匹配值的结果,则将左右上下文包装在环顾中:

var pattern = @"(?<=function\s+loadMarkers\([^()]*\)(?:\r?\n.*){2}\r?\n\s*"")[^""]+(?="")";
var name = Regex.Match(c, pattern).Value;

答案 1 :(得分:1)

或者,您也可以使用模式

(?<=prefix)find(?=suffix)

,它匹配前缀和后缀之间的位置。它直接产生find值,而不必使用组。

(?<=function\sloadMarkers\(\)\s+\{\s+setMarker\(\s+")[^"]+(?=")

其中

prefix = function\sloadMarkers\(\)\s+\{\s+setMarker\(\s+"
find = [^"]+
suffix = "