我有一个很长的文字,部分文字是
您好,我是约翰(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)之后的所有单词,但是当我运行它时,它只删除上次检测中()
之后的单词。
正如你所看到的,(7)之后的单词已经消失,但其余的则没有。
如何在are
之后检测到(1)
?
是否可以用文本框替换(1)之后的单词?
答案 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/。