"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
),以防万一。
"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
),以防万一。
去与此:
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
取代那些比赛。
一般来说你的代码应该是:
s.replace(new RegExp("(\\S)(?:\\s*\\1)+","g"), "$1");
检查this小提琴。
但是,要看是什么这些字符一个,b,ç,...代表你的情况/问题,您可能需要更改\\S
到其他类,如[^ ]
,然后\\s
到[ ]
,如果要包括\ r和\ n到被倒塌以及>>
s.replace(new RegExp("([^ ])(?:[ ]*\\1)+","g"), "$1");
检查this小提琴。
但是,如果一个是要代表字符串\ r \ n,那么你就需要一些更复杂的模式>>
s.replace(new RegExp("(\\r\\n|\\S)(?:[^\\S\\r\\n]*\\1)+","g"), "$1");
检查this小提琴。
当OP的问题没有** C#**标签,只是** html **和** regex **,所以我带** javascript **解决方案来发布我的回复。正则表达式模式对C#来说是一样的,所以你应该能够轻松地克隆它... – 2012-07-29 17:09:59
对于OP:C#regex比JS正则表达式更强大。你可以避开字符串转义序列,并在C#中输入一个文字字符串。 – nhahtdh 2012-07-29 17:12:41
@nhahtdh - 随时编辑我的答案。 – 2012-07-29 17:13:39
如果我正确理解问题,目标是删除特定字符/字符串的重复副本,可能由空格分隔。你可以通过用a
替换正则表达式(a\s*)+
来实现; +
多个连续副本,a\s*
a
s后跟空格你的确切程度取决于语言:在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
重叠)。
试试这个:
Regex.Replace(inputString, @"(\r\n\s+)", " ");
Ria,你的代码会删除每个'\ r \ n',这不是OP所要求的! – 2012-07-29 17:30:07
你在用什么语言? – 2012-07-29 16:50:55
哎呀,更新了这个问题。 'C#',谢谢。 – bevacqua 2012-07-29 17:00:28
为什么这会降低投票率? – bevacqua 2012-07-29 17:16:58