0

我有一个这样的字符串

"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"s 是换行符 ( \r\n),以防发生任何变化。

4

5 回答 5

1

通常你的代码应该是:

s.replace(new RegExp("(\\S)(?:\\s*\\1)+","g"), "$1"); 

检查这个小提琴。

但是,取决于这些字符abc、 ... 在您的案例/问题中代表什么,您可能需要更改\\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");

检查这个小提琴。

于 2012-07-29T16:52:13.847 回答
1

带着这个去:

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.

于 2012-07-29T18:40:04.930 回答
0

如果我正确理解问题,目标是删除特定字符/字符串的重复副本,可能用空格分隔。您可以通过将正则表达式替换(a\s*)+; +对于多个连续副本,a\s*对于as 后跟空格,您执行该操作的精确程度取决于语言:在 Perl 中它是$str =~ s/(a\s*)+/a /g,在 Ruby 中它是str.gsub(/(a\s*)+/, "a "),等等。

事实上ais 实际上\r\n 不应该使事情复杂化,但可能意味着替换会更好地工作s/(\r\n[ \t]*)+/\r\n/g(因为与and\s重叠)。\r\n

于 2012-07-29T16:54:35.797 回答
0

如果您需要 C# 代码并且想要折叠带有前导和尾随空格的JUST \r\n 字符串,那么解决方案非常简单:

string result = Regex.Replace(input, @"\s*\r\n\s*", "\r\n");

在此处检查此代码。

于 2012-07-29T17:28:33.000 回答
-1

试试这个:

Regex.Replace(inputString, @"(\r\n\s+)", " ");
于 2012-07-29T17:27:28.500 回答