9

我需要一些建议。假设我有以下字符串:Read Variable 我想在一个字符串中找到所有这样的文本,并使它们都像下面这样:Variable = MessageBox.Show. 作为其他示例:

"Read Dog" --> "Dog = MessageBox.Show"
"Read Cat" --> "Cat = MessageBox.Show"

你能帮助我吗?我需要在 C# 中使用 RegEx 的快速建议。我认为这是一项涉及通配符的工作,但我不知道如何很好地使用它们......另外,我明天需要这个用于学校项目......谢谢!

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

4

3 回答 3

11

你可以这样做

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

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

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

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

于 2012-11-18T17:59:43.877 回答
6

您可能想澄清您的问题......但这里有:

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

如果要匹配正则表达式中“Read”之后的所有内容,请使用Read (.*)$where.将匹配所有字符并$表示行尾。

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

完整代码:

replacedString = Regex.Replace(inStr, @"Read (.*)$", "$1 = MessageBox.Show");
于 2012-11-18T18:04:48.540 回答
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");

这是一个很好的教程。

最后请注意,在 C# 中,建议将正则表达式编写为逐字字符串 ( @"...")。否则,您将不得不双重转义所有内容,以便反斜杠进入正则表达式引擎,这确实降低了正则表达式的可读性。

于 2012-11-18T18:00:01.453 回答