如何在多行模式下使用正则表达式匹配和替换文本?
我知道RegexOptions.Multiline选项,但是用C#中的新行字符指定匹配all的最佳方法是什么?
输入:
<tag name="abc">this
is
a
text</tag>
Run Code Online (Sandbox Code Playgroud)
输出:
[tag name="abc"]this
is
a
test
[/tag]
Run Code Online (Sandbox Code Playgroud)
啊,我发现了实际的问题.'&'和';' 在Regex中,匹配文本在一行中,而同样需要在Regex中进行转义,以便在有新行的情况下工作.
Dav*_*und 58
如果你的意思是必须有一个换行符的换行符,那么\n你就会这样做.
否则,我认为您可能误解了Multiline/Singleline标志.如果您希望表达式匹配多行,您实际上想要使用RegexOptions.Singleline.这意味着它将整个输入字符串视为一行,从而忽略换行符.这就是你要追求的......?
例
Regex rx = new Regex("<tag name=\"(.*?)\">(.*?)</tag>", RegexOptions.Singleline);
String output = rx.Replace("Text <tag name=\"abc\">test\nwith\nnewline</tag> more text...", "[tag name=\"$1\"]$2[/tag]");
Run Code Online (Sandbox Code Playgroud)
And*_*mar 13
这是匹配的正则表达式.它需要RegexOptions.Singleline选项,这使.匹配换行.
<(\w+) name="([^"]*)">(.*?)</\1>
Run Code Online (Sandbox Code Playgroud)
在此正则表达式之后,第一个组包含标记,第二个组包含标记名称,第三个组包含标记之间的内容.所以替换字符串可能如下所示:
[$1 name="$2"]$3[/$1]
Run Code Online (Sandbox Code Playgroud)
在C#中,这看起来像:
newString = Regex.Replace(oldString,
@"<(\w+) name=""([^""]*)"">(.*?)</\1>",
"[$1 name=\"$2\"]$3[/$1]",
RegexOptions.Singleline);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30755 次 |
| 最近记录: |