将作为序数的字母和数字放在一起

Set together letters and numbers that are ordinal numbers

目的是去掉数字和序数缩写(st,rd,th,nd)之间的space。

例如,以下数字和缩写应该一起组成第 10、第 1 和第 133:

10   th elementary
1  st grade
133  rd anniversary

但是,不允许将这些其他示例设置在一起:

abc123 th 33333    rddccc
10 thetree
20 street

为此,我提出了以下正则表达式:

(?<=[0-9])+\s+(?=(st|nd|rd|th)\b)

但是它也设置了以前不允许的字符串。

你知道我怎样才能设置正确的序号吗?

您可以将另一部分添加到正向先行以断言后面是除下划线或数字之外的单词字符,或者断言字符串的结尾以防它是最后一次出现:

(?<=[0-9])\s+(?=(?:st|[rn]d|th)(?: [^\W\d_]|$))

Regex demo

请注意,您可以在正后视后省略 +,并且可以将交替缩短为 [rn]d