2015-03-01 2 views
1

У меня есть тысячи файлов кода в моем решении, и я пытаюсь найти все ссылки Resource.X в этих файлах.Regex соответствует строке в файлах кода

Например, часть одного из файлов кода является

<div class="col-md-offset-9"> 
     <button type="button" class="btn btn-primary" data-dismiss="modal" id="btnAddEnvironmentRole">@Resources.ES_Save</button> 
     <button type="button" class="btn btn-default" data-dismiss="modal" id="btnCancelAddEnvironmentRole">@Resources.ES_Cancel</button> 
    </div> 

Мне нужно, чтобы соответствовать

"Resources.ES_Save" И "Resources.ES_Cancel"

Там в тысячи файлов кода и тысячи разновидностей Resources.X, но все они начинаются с «Ресурсов».

Я рядом с

\ bResources .. * [а-г] \ б

но это соответствие первый Resources.Save почти до конца файла.

+0

проверить мой ответ и скажите мне, если что-то не ясно, – mybirthname

+0

Возможно, я должен был быть более ясным ..., это только один пример. Я ищу тысячи файлов (cs, cshtml и т. Д.) В решении для тысяч уникальных ресурсов.? слова. –

ответ

0

Вы не должны использовать Regex для HTML. Они много обсуждают, что вы можете это прочитать. Вместо этого вы должны использовать HTML Parser. Вы можете сделать это с помощью HTML Agility Pack.

 HtmlDocument doc = new HtmlDocument(); 
     doc.LoadHtml(html);//html is string 


     var coll = doc.DocumentNode.Descendants().Where(x => x.Name == "button" && x.Attribute["id"] != null && (x.Attribute["id"].Value == "btnAddEnvironmentRole" || x.Attribute["id"].Value == "btnCancelAddEnvironmentRole")).ToList(); 

     foreach(HtmlNode node in coll) 
     { 
      string text = node.InnerText // this will return the text in the node 
     } 

Вы можете Google HTML Agility Pack, то длл в NuGet тоже.

0

Jason, я согласен с @mybirthname, что HTML Agility Pack - это путь вместо регулярных выражений при попытке извлечь HTML, но в этом случае мы просто ищем фрагмент кода бритвы, поэтому регулярное выражение имеет смысл мне. Предполагая, что вы действительно хотите просто найти «Resources.ES_Save» И «Resources.ES_Cancel», это должно быть адекватным:

(?<Resource>@Resources\.ES_(?:Save|Cancel)) 

Названный захват также облегчит доступ. Если вам нужно, чтобы соответствовать всем ресурсам, которые вы могли бы сделать это:

(?<Resource>@Resources\.\w+) 
+0

Ваш второй вариант был очень близок к тому, что мне нужно. Благодаря тонну! \ bResources. \ w + \ b –

+0

Джейсон, я не добавил границу слова, потому что я думал, что вы тоже соответствуете Razor @, я все равно соглашусь с @ и просто раздели его. Таким образом, вам гарантировано, что это ресурс из кода, но вероятность текста в стороне от кода, похожего на Resources.ES_Save, вероятно, довольно низкая. Кроме того, я обновил ответ, потому что забыл избежать периода. – nickytonline

+0

Да, я пытался найти все экземпляры всего моего решения. Спасибо за тонну за вашу помощь! –

Смежные вопросы