【问题标题】:Regex to find trailing numbers正则表达式查找尾随数字
【发布时间】:2010-01-01 20:56:40
【问题描述】:

我有一个看起来像这样的字符串:

www.blah.com/asdf/asdf/asdfasedf/123

字符串可以有一个斜线后跟数字,如上例中的 /123。

如果存在,我想从字符串中提取 123。

我的正则表达式是什么?

【问题讨论】:

  • 这些网址来自哪里?它们是在某处手动输入的,还是从 HTTP 请求中收集的?可以有一个尾随斜杠吗?如果数字是中间的,即example.com/123/asdf,怎么办?您需要更多规范才能获得最佳答案...这里甚至可能不需要正则表达式。

标签: c# regex


【解决方案1】:

用 $ 结束正则表达式以表示行尾。

\/\d+$

要实际提取数字,请使用:

int number;
var match = Regex.Match(inputString,@"\/(\d+)$");
if(match.Success)
    number = int.Parse(match.Groups[1].ToString());

【讨论】:

  • 您还需要确保字符串不为空,以免出现解析错误。
  • Regex.Match 不会抛出异常,我会在它之后检查null。想一想,改为测试match.Success 可能更正确。编辑了我的答案。
  • 是的,匹配永远不应该为空,即使没有匹配也会设置匹配,所以匹配成功将是假的,当你使用空时,代码仍然会执行,即使有比赛中没有小组。
【解决方案2】:

您只需匹配一组数字 (\d+) 并要求字符串在此之后结束

(\d+)$

【讨论】:

    【解决方案3】:

    这将匹配字符串末尾的斜线和数字并捕获数字:

    \/(\d*)$
    

    【讨论】:

    • 谢谢,这也是我想出来的,但斜线似乎是匹配的一部分?
    • 如果你说'可以在斜线之前',那么斜线不应该是正则表达式的一部分!
    • 在我给出的示例中,斜线位于捕获括号之外,因此不会成为捕获组的一部分。如果你不关心它是否存在,你可以省略前导斜杠。您的示例前面有一个斜杠,但如果斜杠是可选的,请忽略它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多