2012-06-18 2 views
2

Я использую Regex для извлечения абзаца. Мой параграф в моей строковой переменной содержит начальную букву G. и заканчивается переменной @Variable.REGEX C# (Соответствие началу и концу слова)

Какой шаблон я использовал бы для захвата этого абзаца? Я использовал код ниже, но я думаю, что я действительно выключен.

Regex.Match(paragraph, @"\G. .*\@Variable$"); 

ответ

2

Было бы что-то вроде этого:

string regex = @"G.+" + variable.ToString() 
Regex.Match(paragraph, regex); 

В то время как вы на него захватить копию Expresso - делает такие задачи намного проще.

+0

Две вещи, во-первых, почему '\ G' нет необходимости избегать G, о котором я знаю? Во-вторых, я думаю, вы захотите сделать '. +', Чтобы вы получили «один или несколько», а не «ноль или больше». – CodingGorilla

+0

@CodingGorilla - Полученные очки - большое спасибо за указание на них –

1

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

Regex.Match(paragraph, string.Format(@"^G.*?{0}$", yourVariableHere)); 
1

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

string regex = @"G.+" + variable; 
Regex.Match(paragraph, regex); 

Пару вещей отметить, что вы должны быть осторожны, что в variable, если он содержит такие вещи, как \, который собирается испортить ваше регулярное выражение. В regex есть «зарезервированные» символы, которые вы должны остерегаться, чтобы не создавать проблем.

Кроме того, вместо .* я использовал .+, что означает «Между одним и неограниченным временем», а не «Между нолем и неограниченным временем», поэтому для вашего «абзаца» требуется хотя бы один символ. Возможно, вы захотите добавить что-то вроде .{10,}, в котором будет установлено не менее 10 символов, в зависимости от ваших потребностей.

+0

Спасибо вам за помощь. Он работал, но не так, как ожидалось. Кажется, что я должен выбрать другой способ выполнения этой задачи из-за множества случаев появления буквы G. Итак, теперь я рассматриваю возможность включения этого конкретного параграфа в двойные скобки. [[paragraph]], поэтому при выполнении регулярного выражения я бы искал все, что было между двойными скобками. Будет ли теперь синтаксис: string regex = @ "[[. +" + "]]"; –

+0

Я решил просто пойти с подстрокой для двойных скобок. Еще раз спасибо! –

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