Обнаруживать слово после регулярного выражения
У меня длинный текст, и часть текста
Привет, я Джон, как (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/.