如何在Visual Studio Regex中捕获任何字符(包括\n)

3

我想做什么:

我想在Visual Studio中重新格式化一堆类似写作风格的HTML文件。 HTML部分可能有不同数量的行,但我知道它们以<div id="some_id">标签开头,没有其他封闭的<div>标签。那么我该如何编写正则表达式来捕获它们之间的任意行数呢?

我到目前为止尝试了什么:

我不能使用.,因为它不会捕获换行符。但我也不知道如何告诉Visual Studio捕获\n.。我知道如何使用集合(例如[a-z0-9]),但是一旦你将.放入其中,它就变成了一个字面量。因此,<div id="some_id">[.\n]*?</div>只会捕获包含一堆点和换行符的div。

提前致谢。

2个回答

10
在 Visual Studio 的查找和替换功能中,你可以使用 [\s\S\r] 字符类匹配包括换行符在内的任意字符。但是出于某些原因,[\s\S] 无法匹配 CR(回车)符号。
你的 [.\n] 字符类只能匹配字面上的一个 . 或一个换行符。
因此,请使用:
<div id="some_id">[\s\S\r]*?</div>
                  ^^^^^^^^^^

0

[.\n] 无法匹配任何字符,我怀疑 [.] 只能匹配点号,而不能匹配其他字符。

(.|\n) 可以用来匹配包括换行符在内的任何字符。

如果你需要进行分组替换,那么可以在整个句子外面加上额外的括号。

例如:

匹配字符串: Assert.ThrowsException<(.*)>\(((.|\n)*?),((.|\n)*?)\);

替换模式为: Assert.Throws<$1>($2);

可以将 Visual Studio 风格的异常转换为 xUnit 风格的异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接