You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效检查字符串是否包含带st/nd/rd/th后缀的数字?

解决方案

直接用正则表达式就能一次性搞定,比你现在写一堆Contains高效多了,还能避免各种误判。

正则匹配逻辑

首先得理清数字后缀的规则:

  • 11、12、13不管末尾数字,都用th
  • 末尾是1的数字(除了11)用st
  • 末尾是2的数字(除了12)用nd
  • 末尾是3的数字(除了13)用rd
  • 其他数字全用th

对应的正则表达式(支持忽略大小写):

\b(?:1[1-3]th|[02-9]1st|[02-9]2nd|[02-9]3rd|\d+(?<!1[1-3])th)\b

关键部分解释:

  • \b:匹配单词边界,防止误判类似5thx这种带多余字符的情况
  • 1[1-3]th:专门覆盖11th、12th、13th这三个例外场景
  • [02-9]1st:匹配21st、31st这类(自动排除错误的11st)
  • \d+(?<!1[1-3])th:匹配所有非11/12/13的数字加th组合

C# 代码实现

直接封装成方法即可使用:

using System.Text.RegularExpressions;

public bool HasValidNumberSuffix(string address)
{
    var pattern = @"\b(?:1[1-3]th|[02-9]1st|[02-9]2nd|[02-9]3rd|\d+(?<!1[1-3])th)\b";
    return Regex.IsMatch(address, pattern, RegexOptions.IgnoreCase);
}

测试验证

用你给出的示例测试,结果完全符合预期:

  • 12th → true
  • 3rd → true
  • Smith → false
  • 11th ST → true
  • 5 → false
  • 21st → true

优势对比

和你原来的方法相比:

  • 代码更简洁:不用写一堆重复的Contains判断
  • 效率更高:一次字符串扫描完成匹配,避免反复遍历
  • 准确性更强:通过单词边界避免了部分匹配的错误(比如原方法会误判1STabc为符合条件,正则不会)

内容的提问来源于stack exchange,提问作者DaBeau96

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:19:54