C # Regular Expression нужна помощь - PullRequest
2 голосов
/ 21 ноября 2010

Я пытаюсь найти часть искомого слова в строковой переменной с регулярным выражением.

Вот содержимое строковой переменной:

string s_Var = "[ Object[Key='o_Module.Id'].Text ]"

[,], ',' и. всегда, но не Key =, Object и Text. (Может быть разным). Я хочу определить часть между 'и' как 'o_Module.Id'

Я хочу принять участие только между 'и'

Можете ли вы помочь мне определить шаблон, который мне нужен?

Пример:

string s_Original_Text = "[ Object[Key='o_Module.Id'].Text ]"

? = я не знаю, значение может быть

[? [?? 'o_Module.?].? ]

Ответы [ 4 ]

3 голосов
/ 21 ноября 2010

Если одинарные кавычки всегда присутствуют в форме, которую вы показали выше, почему бы просто не искать первый индекс 'с использованием SubString? Из того, что я вижу в вашем описании с использованием регулярных выражений, здесь перебор.

1 голос
/ 21 ноября 2010

попробуйте этот код:

var s = "[['o_Module.Id'].Text]"; 
//"[Object[Key='o_Module.Id'].Text]"; //ALSO MATCHES THIS
var r = new System.Text.RegularExpressions.Regex(@"(\[?.*\[?')(.*)('.*)");
var m = r.Match(s);
if (m.Success)
{
    //0 contains whole string
    Console.WriteLine(m.Groups[2].Value); //Prints o_Module.Id
}
0 голосов
/ 21 ноября 2010
\[[^']*?'([^']+)

Значение o_Module.id будет в первой группе захвата.

0 голосов
/ 21 ноября 2010

Я думаю, что обычно это следует делать, предполагая, что всегда есть только один набор одинарных кавычек:

System.Text.RegularExpressions.Match result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", "'([^']*)'");

Если вы хотите добавить этот дополнительный материал:

result = System.Text.RegularExpressions.Regex.Match("[ Object[Key='o_Module.Id'].Text ]", @"\[ (?:Object)?\[(?:Key=)?'([^']*)'\]\.(?:Text)? \]");
...