C#Regex表示不';不要从4个字符开始
我有基本的模式:C#Regex表示不';不要从4个字符开始,c#,regex,C#,Regex,我有基本的模式: Input = Regex.Replace(Input, "#(.+?)#", "<h3>$1</h3>"); 我已经做到了: Input = Regex.Replace(Input, "^( {4}).?#(.+?)#", "<h3>$2</h3>"); 为什么不简单地检查是否存在4个空格 if(line.StartsWith(" ")) { var text = line.Substring(4, li
Input = Regex.Replace(Input, "#(.+?)#", "<h3>$1</h3>");
我已经做到了:
Input = Regex.Replace(Input, "^( {4}).?#(.+?)#", "<h3>$2</h3>");
为什么不简单地检查是否存在4个空格
if(line.StartsWith(" "))
{
var text = line.Substring(4, line.Length - 4);
text = "<h3>" + text + "</h3>";
}
if(line.StartsWith(“”)
{
var text=line.Substring(4,line.Length-4);
text=”“+text+”;
}
您可以使用负回溯来断言输入中没有出现四个空格,如下所示:
"(?<!^ )#(.+?)#"
(?$1”);
当前正则表达式搜索以四个空格开头的行,这就是它不起作用的原因 您可以通过消极前瞻来解决您的问题:
Input = Regex.Replace(Input, "^(?! {4})(.*)#(.+?)#", "$1<h3>$2</h3>");
Input=Regex.Replace(输入,“^(?{4})(.*)#(.+?)#,“$1$2”);
这与从一开始(^
)的行相匹配
- 不要以四个空格开始
(?!{4})
- 在组1
(*)
- #在第2组
中捕获到#(.+?)#
Input=Regex.Replace(输入,“^(?!{4})(.*?)(.+?)#,“$1$2”);
首先,断言该行不以四个空格开头:^(?!{4})
然后捕获它所做的一切,如果它不是您实际匹配的内容:(.*)
最后,在进行真正的替换之前,将初始字符(可能只是一个空字符串)插回:$1$2
Input=Regex.Replace(Input,(?$1”);
这与原始代码做的事情不同,但想法是好的。您似乎想隔离/防止替换此“背景:#ffffff,#
000000;”。但标准充其量也很弱。依靠四个空格来防止此情况并添加标记需要非常严格的格式。如果是这样,则这是可以的。否则,唯一可靠的东西是像这样的东西,s~^\s*\\\\\([^\\\\\n]*)\\\\\\\\s*$~$1~
。即使这需要严格的格式。在磅符号之间的限定条件上必须有很大的限制(我的意见)。
"(?<!^ )#(.+?)#"
if (!Input.StartsWith(" "))
Input = Regex.Replace(Input, "#(.+?)#", "<h3>$1</h3>");
Input = Regex.Replace(Input, "^(?! {4})(.*)#(.+?)#", "$1<h3>$2</h3>");
Input = Regex.Replace(Input, "^(?! {4})(.*?)#(.+?)#", "$1<h3>$2</h3>");
Input = Regex.Replace(Input, "(?<!\\s{4})#(.+?)#", "<h3>$1</h3>");