[英]Building a regex, how to remove redundant line breaks?
我有这样的字符串
"a a a a aaa b c d e f a g a aaa aa a a"
我想把它变成
"a b c d e f a g a"
要么
"a b c d e f a g a "
(以比较容易,因为它是HTML,所以没关系)
"a"
是换行符( \\r\\n
),以防万一。
通常,您的代码应为:
s.replace(new RegExp("(\\S)(?:\\s*\\1)+","g"), "$1");
检查这个小提琴。
但是,根据您的案例/问题中的那些字符a , b , c ,...,您可能需要将\\\\S
更改为其他类,例如[^ ]
,然后将\\\\s
更改为[ ]
,如果您还想将\\ r和\\ n也包含在内,请>>
s.replace(new RegExp("([^ ])(?:[ ]*\\1)+","g"), "$1");
检查这个小提琴。
但是,如果a要表示字符串\\ r \\ n ,那么您将需要更复杂的模式>>
s.replace(new RegExp("(\\r\\n|\\S)(?:[^\\S\\r\\n]*\\1)+","g"), "$1");
检查这个小提琴。
如果我正确理解问题,则目标是删除特定字符/字符串的重复副本,可能用空格分隔。 您可以通过将正则表达式(a\\s*)+
替换a
;来实现。 +
多个连续拷贝, a\\s*
为a
秒,然后用空格怎么正是你做到这一点取决于语言:在Perl是$str =~ s/(a\\s*)+/a /g
,在Ruby中它的str.gsub(/(a\\s*)+/, "a ")
等。
a
实际上是\\r\\n
的事实不应该使事情复杂化,但可能意味着,替换为s/(\\r\\n[ \\t]*)+/\\r\\n/g
更好(因为\\s
与\\r
和\\n
重叠。
如果您需要C#代码,并且想用开头和结尾的空格折叠\\ r \\ n字符串,则解决方案非常简单:
string result = Regex.Replace(input, @"\s*\r\n\s*", "\r\n");
在此处检查此代码。
与此:
private string GetDescriptionFor(HtmlDocument document)
{
string description = CrawlUsingMetadata(XPath.ResourceDescription, document);
Regex regex = new Regex(@"(\r\n(?:[ ])*|\n(?:[ ])*){3,}", RegexOptions.Multiline | RegexOptions.IgnoreCase);//(?:[^\S\r\n|\n]*\1)+
string result = regex.Replace(description, "\n\n");
string decoded = HttpUtility.HtmlDecode(result);
return decoded;
}
正如它应该做的那样,它会忽略所有换行符,除非匹配三个或更多连续换行符的情况(忽略空格),然后用\\n\\n
替换那些匹配项。
试试这个:
Regex.Replace(inputString, @"(\r\n\s+)", " ");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.