使用RegEx删除(但不包括)3/4位序列后的所有内容

时间:2013-12-30 22:02:20

标签: c# regex

我有以下格式的某些地址

G.DE GOUVEIA 1419 (COMP.CH 99) Y RIVERA
J BELLONI 6366 CASI INSTRUCCIONES
ANTONIO MENDEZ 1290 Y ORTICOECHEA

我想删除其中的所有内容,但不包括4位数字(长度至少为3或4位)

我可以使用像

这样的正则表达式
\d+3.*

在(包括)数字之后捕获所有内容,但我不知道如何使其仅捕获数字后面的任何内容以删除它们但不删除数字本身。

或者,我可以使用

(?<=\d\d\d\d).*

捕获4个字符后的所有内容但不适用于3位数字的地址。如果我只使用3个数字,则不适用于4位数字。

此外,某些地址的格式为

ALEJANDRO GALLINAL 1588 BIS Y AV.RIVERA

我确实要保留BIS,所以我想删除BIS之后的所有内容,而不是数字之后。 我如何在正则表达式中编写它?

1 个答案:

答案 0 :(得分:1)

你基本上拥有它,但你想要匹配,而不是之后。所以就像这样重复你的正则表达式。 .*?\d{3,}

    static string test = @"G.DE GOUVEIA 1419 (COMP.CH 99) Y RIVERA";

    static void Main(string[] args)
    {

        Console.WriteLine(Regex.Match(test, @".*?\d{3,}").Value);            
    }

编辑注释

如果将表达式更改为".*((BIS)|\d{3,})",则会处理两种情况。