C# 删除连续的<;br>;使用正则表达式c从字符串#
我有以下字符串正则表达式C# 删除连续的<;br>;使用正则表达式c从字符串#,c#,regex,C#,Regex,我有以下字符串正则表达式 "choose to still go on the trip. <br><br>\r\nNote that when booking" “选择继续旅行。\r\n预订时请注意” 在用正则表达式转换它之后,我需要用一个标记替换标记,所以字符串如下所示 "choose to still go on the trip. <br>Note that when booking" “选择继续旅行。请注意,在预订时” 编辑:如果您不知道您有多
"choose to still go on the trip. <br><br>\r\nNote that when booking"
“选择继续旅行。
\r\n预订时请注意”
在用正则表达式转换它之后,我需要用一个
标记替换
标记,所以字符串如下所示
"choose to still go on the trip. <br>Note that when booking"
“选择继续旅行。
请注意,在预订时”
编辑:如果您不知道您有多少个
,可以执行以下操作:
使用
拆分字符串并删除空条目
使用单个
代码如下:
string yourString = "choose to still go on the trip. <br><br>\r\nNote that when booking";
var temp =
yourString.Split(new string[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries)
.Where(i => i.Replace(" ", string.Empty).Length > 0);
string result = string.Join("<br>", temp);
string yourString=“选择继续旅行。
\r\n预订时请注意”;
变量温度=
拆分(新字符串[]{“
”},StringSplitOptions.RemoveEmptyEntries)
其中(i=>i.Replace(“,string.Empty).Length>0);
字符串结果=string.Join(“
”,temp);
就像马丁·伊登所怀疑的那样:
while (text.Contains("<br><br>"))
{
text = text.Replace("<br><br>", "<br>");
}
while(text.Contains(“
”)
{
text=text。替换(“
”,“
”;
}
或
string newString=oldString.Replace(“
”,“
”);
newString=newString.Replace(“
”,“
”);
使用递增的
执行多行这样的操作如果需要考虑标记之间存在空格的情况,请尝试以下正则表达式:
myInputStr = Regex.Replace(myInputStr,
@"([\b\s]*<[\b\s]*[bB][rR][\s]*/?[\b\s]*>){2,}",
"<br>", RegexOptions.Multiline);
myInputStr=Regex.Replace(myInputStr,
@“([\b\s]*){2,}”,
“
”,RegexOptions.Multiline);
此正则表达式将用单个实例替换2个或多个
标记实例,而不管标记的形式(间距、大小写、自动关闭等)。这可以通过另一种(更安全的)方式完成,使用HTML Agility Pack(开源项目)
它考虑了各种符号
,
,
,无需担心。这意味着您可以专注于实际任务:替换重复项
Regex.Replace(input, @"(<br\s*/{0,1}>\s*(</\s*br>)*){2,}", "<br>",
RegexOptions.CultureInvariant |
RegexOptions.IgnoreCase |
RegexOptions.Multiline);
请参阅,它解释了如何替换重复项的方法。Regex.replace(输入,@“(\s*()*){2,}”,“
”,
Regex.Replace(input, @"(<br\s*/{0,1}>\s*(</\s*br>)*){2,}", "<br>",
RegexOptions.CultureInvariant |
RegexOptions.IgnoreCase |
RegexOptions.Multiline);
RegexOptions.CultureInvariant|
RegexOptions.IgnoreCase|
RegexOptions.Multiline);
将
或
或
的任何两个或多个事件替换为一个
这将考虑到空格<代码>
将与
或
匹配
如果您事先删除了不需要的“\r\n”,您可以省略RegexOptions。多行这不适用于3个或更多
(以及该“版本”)br来自用户输入,我不知道会有多少个。如果您需要的只是将“
”的实例替换为“
”,这将起作用。如果有更多的br标记,或者标记的格式不同(例如
),那么这将不起作用。您遇到的问题比您想象的要大。。。。现在是
(现在)你能解释一下更广泛的背景吗?为什么要从一个有两个br和一个换行符的字符串变成一个有一个br和一个不换行符的字符串?我假设您希望将其渲染回用户。也许一个好的方法是去掉所有标记(请参阅),然后插入新标记(如有换行符的地方有
标记?这不起作用。如果我有
,该怎么办?第一行将把它减少到只
,这样第二行就不会捕捉到它。如果必须采取这种方法,那么while(text.Contains(
)){text=text.Replace(“
”,“
”);}同样,这不会处理不同格式的br标记-例如,
,我相信这是有效的html。现在你有两个问题。等等,这就是他们对正则表达式的说法:)@VVS:你是什么意思,是吗?@L-Tree:虽然Agility Pack非常酷,但您却在针对单个问题推出一个功能齐全的框架,这可能会导致更多问题。@VVS:是的,这是一个旨在帮助您完成任务的框架。对我来说,这是使用一个可能做得更好的框架来简化任务。