正则表达式删除序数

问题描述 投票:0回答:6

我需要通过正则表达式删除序数,但我的正则表达式技能非常缺乏。下面的代码定位序数,但在返回值中包含前面的数字。我需要隔离并删除序数。

[0-9](?:st|nd|rd|th)
regex
6个回答
16
投票

您需要使用 look-behind 断言,以便仅匹配前面带有

st|nd|rd|th
[0-9]
,但
[0-9]
不包含在匹配中。即:

(?<=[0-9])(?:st|nd|rd|th)

我已经链接到与 perl 兼容的语法,但如果您使用 posix、posix Extended、vi 或许多其他正则表达式语法之一,您需要查找语法。


7
投票

在 Perl 中:

$var =~ s{\b(\d+)(?:st|nd|rd|th)\b}{$1};

在 PHP 中:

$var = preg_replace('/\\b(\d+)(?:st|nd|rd|th)\\b/', '$1', $var);

在.NET中:

var = Regex.Replace(@"\b(\d+)(?:st|nd|rd|th)\b", "$1");

2
投票

如果您还想删除序数后的数字,您可以使用这个:

[0-9]+(?:st| st|nd| nd|rd| rd|th| th)

因此,对于给定的文本: “第三个人失踪,但第二个人和第一个人在这里” 您将得到以下输出: “人失踪了,但他在这里”


1
投票

尝试消极回顾:

(?<=[0-9])(?:st|nd|rd|th)

假设正则表达式的方言支持它。


0
投票

我遇到这个问题,因为我需要用点替换序数,i。 e.

1.
2.
4.

这里是这个问题的解决方案(PHP):

$entry = preg_replace('/^\d+\. /', '', $entry);

测试:https://regex101.com/r/xLB6Ov/1


0
投票

有人可以提供不区分大小写的版本吗?我在 Python 中尝试了下面的方法,但它不起作用(但是区分大小写的版本可以工作)。

© www.soinside.com 2019 - 2024. All rights reserved.