15

我的文字很长,部分文字是

你好,我是约翰(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) 之后的所有单词,但是当我运行它时,它只会删除()最后一次检测中的单词 after。

在此处输入图像描述

如您所见,(7)之后的单词消失了,但其余的没有。

如何检测are之后(1)
是否也可以用文本框替换 (1) 之后的单词?

4

4 回答 4

19

使用正向向后查找 ( (?<=\(\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]);

顺便说一句,使用@"..",你不需要逃避\


更新

而不是使用.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?
于 2013-07-31T07:13:03.323 回答
1

像这样的东西会起作用吗?

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

已添加组以方便使用。:)

于 2013-07-31T07:15:13.560 回答
0

尝试这个,

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)之后的字符串最终剩余文本将存储。

于 2013-07-31T07:22:13.137 回答
0

如果您想替换文本(我假设您正在寻找一些 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/

于 2013-07-31T07:24:21.500 回答