正则表达式删除数字和 - 开头

时间:2010-08-24 16:16:32

标签: c# regex string

我正在处理字符串列表,但我想改变字符串,这样它们对用户来说看起来并不丑陋。一个示例列表是

2736162 Magazines
23-2311 Numbers
1-38122 Faces
5-231123 Newspapers
31-31235 Armynews
33-12331 Celebrities 1
33-22113 Celebrities 2
Cars
Glasses

我想要的是修剪开头,以便省略丑陋的数字序列和“ - ”,并且用户只能看到有意义的数据:

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses

我如何用正则表达式删除数字/ - 的开头?

修改 是否可以设计相同的REGEX来剥离这些值:

FFKKA9101U- Aquatic Environmental Chemistry
FLVKB0381U- Clinical Drug Development
4761-F-Filosofisk kulturkritik
B22-1U-Dynamic biochemistry

为:

Aquatic Environmental Chemistry
Clinical Drug Development
Filosofisk kulturkritik
Dynamic biochemistry

我想到的规则是,如果只有大写字母,数字和 - 或+之前的符号 - 它只对机器有意义,而不是一个真正的单词,因此应该被剥离,我不知道如何在正则表达式中表达这一点。

2 个答案:

答案 0 :(得分:14)

看起来您可以使用空字符串匹配并替换^[\d-]*\s*

[…]character class。像[aeiou]这样的东西匹配任何一个小写元音。 \d是数字字符类的简写,因此[\d-]匹配数字或短划线。 \s是空白字符类的简写。

^beginning of the line anchor*为“零或多”repetition

因此,模式在一行的开头匹配一系列数字或破折号,后跟一系列空格。

从问题中不清楚,但如果输入是多行文本(而不是一次只应用一行正则表达式),那么您也需要启用multiline mode


C#片段

以下是C#中的示例代码段:

var text = @"
2736162 Magazines
23-2311 Numbers
1-38122 Faces
5-231123 Newspapers
31-31235 Armynews
33-12331 Celebrities 1
33-22113 Celebrities 2
Cars
Glasses
";

Console.WriteLine(
  Regex.Replace(
     text,
     @"^[\d-]*\s*",
     "",
     RegexOptions.Multiline
  )
);

输出为(as seen on ideone.com):

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses

根据风味,您可能必须将多线模式指定为/m标记(或(?m)嵌入)。如果您将模式表示为字符串文字,则可能还需要加倍反斜杠,例如在Java中,您可以使用text.replaceAll("(?m)^[\\d-]*\\s*", "")


关于在字符类中包含破折号的特别说明

-字符类中包含[…]时要小心,因为它可以表示范围而不是文字-字符。像[a-z]这样的东西与小写字母匹配。 [az-]之类的内容与'a''z''-'匹配。

相关问题

答案 1 :(得分:0)

如果每行都有数字(有或没有),你可以在空格上分割线条,排除第一块然后再加入。