正则表达式删除序数

时间:2011-05-31 02:04:28

标签: regex

我需要通过正则表达式删除序数,但我的正则表达式技能非常缺乏。以下是定位序数,但包括返回值之前的数字。我需要隔离并删除序数。

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

5 个答案:

答案 0 :(得分:14)

您需要使用look-behind assertion,以便只有st|nd|rd|th之前的[0-9]匹配,但匹配中不包含[0-9]。即:

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

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

答案 1 :(得分:4)

在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 :(得分:1)

尝试消极的后视:

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

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

答案 3 :(得分:0)

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

以下是此问题的解决方案(在PHP中):

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

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

答案 4 :(得分:0)

如果您还要删除序号后面的数字,则可以使用此数字:

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

因此对于给定的文本:“缺少第三个人,但是第二个人和第一个人在这里” ,您将获得以下输出:      “此人不见了,而and在这里”