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

Jua*_*rez 3 python regex regex-lookarounds

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

例如,以下数字和缩写应该一起形成 10th、1st 和 133rd:

10   th elementary
1  st grade
133  rd anniversary
Run Code Online (Sandbox Code Playgroud)

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

abc123 th 33333    rddccc
10 thetree
20 street
Run Code Online (Sandbox Code Playgroud)

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

(?<=[0-9])+\s+(?=(st|nd|rd|th)\b)
Run Code Online (Sandbox Code Playgroud)

然而,它也将之前不允许的字符串设置在一起。

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

The*_*ird 7

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

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

正则表达式演示

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

  • @JuanPerez我添加它是因为你首先想检查`(?:st|[rn]d|th)`,后面可以跟一个空格和`[^\W\d_]`或字符串的结尾在这种情况下,您不必捕获它,因为它不用于进一步处理。 (2认同)