我有一个像这样的字符串
"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
),以防万一。
答案 0 :(得分:1)
通常您的代码应为:
s.replace(new RegExp("(\\S)(?:\\s*\\1)+","g"), "$1");
检查this小提琴。
但是,取决于那些字符 a , b , c ,......代表你的案例/问题,您可能需要将\\S
更改为其他类,例如[^ ]
,然后\\s
更改为[ ]
,如果您想要包含 \ r 并且 \ n 也可以折叠>>
s.replace(new RegExp("([^ ])(?:[ ]*\\1)+","g"), "$1");
检查this小提琴。
但是,如果 a 代表字符串 \ r \ n ,那么您需要更复杂的模式>>
s.replace(new RegExp("(\\r\\n|\\S)(?:[^\\S\\r\\n]*\\1)+","g"), "$1");
检查this小提琴。
答案 1 :(得分:0)
如果我正确理解了问题,目标是删除特定字符/字符串的重复副本,可能用空格分隔。您可以将正则表达式(a\s*)+
替换为a
来执行此操作; +
用于多个连续副本,a\s*
用于a
s后跟空格你做得多精确取决于语言:在Perl中它是$str =~ s/(a\s*)+/a /g
,在Ruby中{{1}等等。
事实str.gsub(/(a\s*)+/, "a ")
实际上a
不应该使事情复杂化,但可能意味着替换会更好地作为\r\n
(从{{{ 1}}与s/(\r\n[ \t]*)+/\r\n/g
和\s
)重叠。
答案 2 :(得分:0)
如果您需要C#代码,并且想要使用前导和尾随空格折叠 JUST \ r \ n字符串,那么解决方案非常简单:
string result = Regex.Replace(input, @"\s*\r\n\s*", "\r\n");
检查此代码here。
答案 3 :(得分:0)
走了这个:
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
替换这些匹配。
答案 4 :(得分:-1)
试试这个:
Regex.Replace(inputString, @"(\r\n\s+)", " ");