C# regex电话号码和url与号码冲突

C# regex电话号码和url与号码冲突,c#,regex,C#,Regex,我有一个小c#程序,它可以获取纯文本,需要将电话号码转换为电话号码链接(它在移动设备上运行),并将常规URL转换为可点击的链接 我为phone编写了以下正则表达式: (((\d)(-)?)+){7,15} 以及以下URL: ((www\.|(http|https|ftp|news|file)+\:\/\/)?[_.a-zA-Z0-9-]+\.[a-zA-Z0-9\/_:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|&l

我有一个小c#程序,它可以获取纯文本,需要将电话号码转换为电话号码链接(它在移动设备上运行),并将常规URL转换为可点击的链接

我为phone编写了以下正则表达式:

(((\d)(-)?)+){7,15}
以及以下URL:

((www\.|(http|https|ftp|news|file)+\:\/\/)?[&#95;.a-zA-Z0-9-]+\.[a-zA-Z0-9\/&#95;:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)])
它正确地设置了电话号码(052-1234567),并将url设置为正确的号码()。url末尾的号码也被识别为电话号码

我有两个问题:

  • 如果我注释掉电话号码,我会看到url正则表达式忽略了结尾的号码
  • 由于电话号码regex replace发生在url regex replace之前,因此它会将url中的号码作为电话号码捕获
  • 我在想的是如何改变电话号码regex,所以如果它只以数字开头,那么它将是有效的(或者简单地说,捕获一个不以…开头的模式)

    当然,为什么我的url正则表达式不能处理结尾的数字

    谢谢

    编辑

    我能够通过在最后一个结束括号之前添加另一个*来解决url正则表达式问题

    ((www\.|(http|https|ftp|news|file)+\:\/\/)?[&#95;.a-zA-Z0-9-]+\.[a-zA-Z0-9\/&#95;:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)]*)"
    

    ((www.|(http | https | ftp | news | file)+\:\/\/)?[_;.a-zA-Z0-9-]+\.[a-zA-Z0-9\/_;:@=.+?,##%&-*[^.||\(|?|,| | ^ ^
    不应该在你的电话号码正则表达式解决它之前添加一个
    ^
    吗?@dhrubajoyotigogoi厌倦了-当我添加一个时,它不会识别任何。除非我用错了。你能写一个例子吗?供你每次编写
    [^.\\\\\\\\\35;|\(|?|,| |>|作为@zx81,您必须使用您的正则表达式,因为您没有提到预期的数据格式。您定义的电话号码作为URL的一部分也是有效的。一个好的一般规则是对测试进行排序,以便首先测试最大或限制最大的一个。
    
    ((www\.|(http|https|ftp|news|file)+\:\/\/)?[&#95;.a-zA-Z0-9-]+\.[a-zA-Z0-9\/&#95;:@=.+?,##%&~-]*[^.|\'|\# |!|\(|?|,| |>|<|;|\)]*)"