正则表达式后检测单词

时间:2013-07-31 07:04:16

标签: c# regex

我有一个很长的文字,部分文字是

  

您好,我是约翰(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)? 是否可以用文本框替换(1)之后的单词?

4 个答案:

答案 0 :(得分:19)

使用正向lookbehind查找((?<=\(\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,使用@"..",您无需转义\


<强>更新

而不是使用.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?

答案 1 :(得分:1)

这样的事情会起作用吗?

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

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

答案 2 :(得分: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)之后的字符串最后剩余文本中存储。

答案 3 :(得分: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/