我需要通过正则表达式删除序数,但我的正则表达式技能非常缺乏。以下是定位序数,但包括返回值之前的数字。我需要隔离并删除序数。
[0-9](?:st|nd|rd|th)
答案 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);
答案 4 :(得分:0)
如果您还要删除序号后面的数字,则可以使用此数字:
[0-9]+(?:st| st|nd| nd|rd| rd|th| th)
因此对于给定的文本:“缺少第三个人,但是第二个人和第一个人在这里” ,您将获得以下输出: “此人不见了,而and在这里”