C#Regex,用于没有';t以4个字符开头
本文关键字:4个 字符 开头 用于 C#Regex | 更新日期: 2023-09-27 18:08:22
我有一个基本模式:
Input = Regex.Replace(Input, "#(.+?)#", "<h3>$1</h3>");
现在我只想让它匹配,如果它所在的行不是以4个空格字符开头。例如:
This line #would match#
#this one# wouldn't
我已经达到:
Input = Regex.Replace(Input, "^( {4}).?#(.+?)#", "<h3>$2</h3>");
但这似乎并不奏效;它不能正常更换。以下是一些测试数据:
#This is my header#
Some text, code below:
background:#333333;
background: #ffffff, #000000;
Testing text
#Another header#
Text
您可以使用否定的lookbacking来断言输入中没有出现四个空格,如下所示:
"(?<!^ )#(.+?)#"
但是,在应用正则表达式之前进行检查可能会更具可读性。
if (!Input.StartsWith(" "))
Input = Regex.Replace(Input, "#(.+?)#", "<h3>$1</h3>");
为什么不简单地检查4个空间的存在?
if(line.StartsWith(" "))
{
var text = line.Substring(4, line.Length - 4);
text = "<h3>" + text + "</h3>";
}
Input = Regex.Replace(Input, "^(?! {4})(.*?)#(.+?)#", "$1<h3>$2</h3>");
首先,断言该行不是以四个空格开头的:^(?! {4})
。
然后捕获所做的一切,如果它不是你真正匹配的东西:(.*?)
。
最后,在进行真正的替换之前,将初始字符(可以只是一个空字符串(插回:$1<h3>$2</h3>
。
您当前的正则表达式搜索以四个空格开头的行,这就是为什么它不起作用。
你可以通过负面展望来解决你的问题:
Input = Regex.Replace(Input, "^(?! {4})(.*)#(.+?)#", "$1<h3>$2</h3>");
这与从一开始(^
(
- 不以四个空间CCD_ 5开始
- 直到
#...#
的剩余部分被捕获在组1(.*)
中 - #…#在第2组CCD_ 8中捕获
Input = Regex.Replace(Input, "(?<!''s{4})#(.+?)#", "<h3>$1</h3>");