首页 > 解决方案 > 将作为序数的字母和数字组合在一起

问题描述

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

例如,以下数字和缩写应一起构成第 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)

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

你知道我怎样才能把正确的序数组合在一起吗?

标签: pythonregexregex-lookarounds

解决方案


您可以在肯定的前瞻中添加另一部分以断言以下是除下划线或数字之外的单词字符,或者断言字符串的结尾以防它是最后一次出现:

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

正则表达式演示

请注意,您可以省略+after positive lookbehind 并且您可以将交替缩短为[rn]d


推荐阅读