Обнаруживать слово после регулярного выражения

У меня длинный текст, и часть текста

Привет, я Джон, как (1) есть (есть/есть) вы?

Я использовал это для обнаружения (1).

string optionPattern = "[\\(]+[0-9]+[\\)]";
Regex reg = new Regex(optionPattern);

Но я застрял здесь, чтобы продолжить, как обнаружить после (1), чтобы найти are.

Полный код (спасибо falsetru за то, что вы меня так далеко):

string optionPattern = @"(?<=\(\d+\))\w+";
Regex reg = new Regex(optionPattern);

string[] passage = reg.Split(lstQuestion.QuestionContent);
foreach (string s in passage)
{
    TextBlock tblock = new TextBlock();
    tblock.FontSize = 19;
    tblock.Text = s;
    tblock.TextWrapping = TextWrapping.WrapWithOverflow;
    wrapPanel1.Children.Add(tblock);
}

Я предполагаю, что если я раскол как это, он удалит все слова после (0-9), но когда я запустил его, он удалит только слово после () в последнем обнаружении.

enter image description here

Как вы можете видеть, слово после (7) исчезло, а остальное - нет.

Как определить are после (1)?
Можно ли заменить слово after (1) текстовым полем?

Ответы

Ответ 1

Используйте положительный lookbehind lookup ((?<=\(\d+\))\w+):

string text = "Hello , i am John how (1)are (are/is) you?";
string optionPattern = @"(?<=\(\d+\))\w+";
Regex reg = new Regex(optionPattern);
Console.WriteLine(reg.Match(text));

Отпечатки are

Альтернатива: захватить группу (\w+)

string text = "Hello , i am John how (1)are (are/is) you?";
string optionPattern = @"\(\d+\)(\w+)";
Regex reg = new Regex(optionPattern);
Console.WriteLine(reg.Match(text).Groups[1]);

BTW, используя @"..", вам не нужно бежать \.


UPDATE

Вместо использования .Split() просто .Replace():

string text = "Hello , i am John how (1)are (are/is) you?";
string optionPattern = @"(?<=\(\d+\))\s*\w+";
Regex reg = new Regex(optionPattern);
Console.WriteLine(reg.Replace(text, ""));

альтернатива:

string text = "Hello , i am John how (1)are (are/is) you?";
string optionPattern = @"(\(\d+\))\s*\w+";
Regex reg = new Regex(optionPattern);
Console.WriteLine(reg.Replace(text, @"$1"));

печатает

Hello , i am John how (1) (are/is) you?

Ответ 2

Что-то вроде этой работы?

\((?<number>[0-9]+)\)(?<word>\w+)

Группы, которые уже добавлены для удобства использования.:)

Ответ 3

Попробуйте это,

string text = "Hello , i am John how (1)are (are/is) you?";
string optionPattern = "[\\(]+[0-9]+[\\)]";
Regex reg = new Regex(optionPattern);
Match t = reg.Match(text);
int totallength = t.Index + t.Length;
string final = text.Substring(totallength,text.length-totallength);

в строке окончательный оставшийся текст после (1) будет сохранен.

Ответ 4

Если вы хотите заменить текст (я предполагаю, что вы ищете какой-то HTML), попробуйте:

var input = "Hello , i am John how (1)are (are/is) you?";
var output= Regex.Replace(input, @"(?<=\(\d*\))\w*", m => {
    return "<input type='text'/>";
});

И вот как выводится вывод: http://jsfiddle.net/dUHeJ/.