如何有选择地从URL中删除换行符

时间:2012-03-28 10:50:07

标签: c# html regex

在邮件系统上,当在一定数量的字符之后发布邮件时,会自动添加换行符(愚蠢的做事方式但不幸的是不允许更改)。这意味着中断已自动插入到URL中,因此可以拆分长的中断,例如:

http://www.stackoverflow.com/some-more-<br/>stuff

检索邮件时,函数会将链接转换为标记,此URL的结果为:

<a href='http//www.stackoverflow.com/some-more-'>http://www.stackoverflow.com/some-more-</a>stuff

我需要在<br/>转换为链接之前删除它。

我已经将消息拆分为空格中的单词,然后遍历每个单词,看它是否包含“http://”或“www”。然后用空字符串替换<br/>

但是,这仅适用于在段落中输入的URL,例如:

  

网址为http://www.stackoverflow.com

对于使用换行符输入的网址不起作用,例如:

  

以下是网址:

     

http://www.stackoverflow.com

     

这里还有一些文字

..被切入:

  

这是URL:http://www.stackoverflow.com这里还有一些文字

..因为在这个'单词'中删除了所有换行符(因为我在空格上分裂,所有这些都被视为一个单词)。

我认为我可以拆分换行符,但是这对于在第一个示例中输入的段落中的URL不起作用,并且它也会在包含中断的任何URL的中间拆分。

显然,我需要以某种方式找到网址并替换其中的换行符,但我遇到了这个问题,因为我似乎无法做到这一点!

如果我遗漏任何细节,请随时提出,我会马上回来。谢谢:))

PS - 这是用C#编码的。

1 个答案:

答案 0 :(得分:1)

请删除其他答案。

我无法解决你的问题。不,我想我做了。

您可以使用此正则表达式查找所有网址,不管它们是否在多行中被破坏:

(?<url>https?://(.|\r\n)*?(=? ))

这将返回名为“url”的捕获组,其中包含您的网址,其中包含或不包含换行符。你可以使用(。| \ r \ n)*来获得它,它允许通过\ r \ n(cr,lf)查找多行中断的URL。检查这是否是邮件的行尾编码。如果没有,你可以用(。| \ n)或者你的情况更改地址。

您找到了自己的网址,可以删除其中的\ r \ n。

您可以使用此正则表达式进行改进:

(?<url>https?://(.|(?<deleteMe>\r\n))*?(=? ))

deleteMe组会捕获网址内的所有违规换行符,因此您可以安全地将其全部删除。

重要提示:您必须使用多行选项运行正则表达式如果不是,则无效。

示例文字:

The firs url is http://www.casa.com/aqui.htm and the second is http://www.the
house.com/broken url

匹配

url: http://www.casa.com/aqui.htm
url: http://www.the\r\nhouse.com/broken

删除我的组匹配粗体\ r \ n