如何在正则表达式中完全忽略换行符和制表符?

14

有没有办法在正则表达式中完全忽略换行符和制表符等字符? 例如,换行符和制表符可以在内容字符串的任何位置和任何顺序中找到。

... [CustomToken \t \r\n Type="User" \t \r\n Property="FirstName" \n /] ... [CT ...

这是我目前使用的正则表达式:

(\[CustomToken).*?(\/\])

.NET API

Regex.Matches(string input, string pattern)
感谢您的建议。
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
25

如果你只想让该正则表达式匹配该输入,那么你需要做的就是指定 Singleline 模式:

Regex.Matches(input, @"\[CustomToken).*?(/\])", RegexOptions.Singleline);

点号元字符通常匹配除了换行符 (\n) 以外的任何字符。单行模式,也称为“点匹配所有”或“DOTALL”模式,允许它匹配换行符。


4

无法使用正则表达式“忽略”任何类型的字符。您可以忽略字母大小写,但仅限于此。

最好的方法是在期望某种空格的位置使用\s+\s类将匹配任何空白字符,包括换行符、回车符、制表符和空格,这将使您的正则表达式模式看起来更加清晰。


1

你需要制表符或换行符吗?您可以将制表符或换行符字符替换为空字符以删除它们。

string mystring = "\t\nhi\t\n";

string mystring_notabs = mystring.Replace("\t",""); //remove tabs

mystring = mystring_notabs.Replace("\n",""); //remove newline and copy back to original

0
我遇到了一个多行 XML 值的问题。我想要在描述字段中获取数据,但我不想更改我的 C# 代码以使用单行选项,因为我正在从数据库动态读取用于解析的正则表达式。这个问题得到了解决,特别是前面的 (?s):
 (?s)(?<=<description>).*(?=<\/description>)

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