替换为通配符

时间:2012-11-18 17:54:42

标签: c# regex

我需要一些建议。假设我有以下字符串:Read Variable 我想在字符串中找到这样的所有文本片段,并使其全部如下:Variable = MessageBox.Show。所以作为附加的例子:

"Read Dog" --> "Dog = MessageBox.Show"
"Read Cat" --> "Cat = MessageBox.Show"
你能帮帮我吗?我需要在C#中使用RegEx快速建议。我认为这是一项涉及通配符的工作,但我不知道如何使用它们......而且,明天我需要这个用于学校项目......谢谢!

编辑:这是我到目前为止所做的,它不起作用:Regex.Replace(String, "Read ", " = Messagebox.Show")

3 个答案:

答案 0 :(得分:9)

你可以这样做

string ns= Regex.Replace(yourString,"Read\s+(.*?)(?:\s|$)","$1 = MessageBox.Show");

\s+匹配1到多个空格字符

(.*?)(?:\s|$)匹配0到多个字符,直到第一个空格(即\s)或到达字符串末尾(即$

$1代表第一个被捕获的群体,即(.*?)

答案 1 :(得分:5)

您尝试的问题是,它无法知道您的变量后应插入替换字符串。假设有效的变量名称包含字母,数字和下划线(可以方便地与\w匹配)。这意味着,任何其他字符结束变量名称。然后你可以匹配变量名称,捕获它(使用括号)并将其放在带有$1的替换字符串中:

output = Regex.Replace(input, @"Read\s+(\w+)", "$1 = MessageBox.Show");

请注意\s+匹配一个或多个任意空格字符。 \w+匹配一个或多个字母,数字和下划线。如果您只想将变量名称限制为字母,可以在此处进行更改:

output = Regex.Replace(input, @"Read\s+([a-zA-Z]+)", "$1 = MessageBox.Show");

Here is a good tutorial.

最后请注意,在C#中,建议将正则表达式编写为逐字符串(@"...")。否则,你将不得不双重逃避一切,以便反斜杠进入正则表达式引擎,这真的会降低正则表达式的可读性。

答案 2 :(得分:5)

你可能想澄清一下你的问题......但是这里有:

如果要匹配正则表达式中“读取”之后的下一个单词,请使用Read (\w*),其中\w是单词字符类,*是贪婪匹配运算符。

如果您想匹配正则表达式中“阅读”后的所有内容,请使用Read (.*)$,其中.将匹配所有字符,$表示行尾。

使用正则表达式,您可以使用$1 = MessageBox.Show的替换,因为$ 1将引用第一个匹配的组(由括号表示)。

完整代码:

replacedString = Regex.Replace(inStr, @"Read (.*)$", "$1 = MessageBox.Show");