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

Jak*_*kob 7 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
Run Code Online (Sandbox Code Playgroud)

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

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses
Run Code Online (Sandbox Code Playgroud)

我如何在正则表达式的基础上删除数字/ - ?

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

FFKKA9101U- Aquatic Environmental Chemistry
FLVKB0381U- Clinical Drug Development
4761-F-Filosofisk kulturkritik
B22-1U-Dynamic biochemistry
Run Code Online (Sandbox Code Playgroud)

至:

Aquatic Environmental Chemistry
Clinical Drug Development
Filosofisk kulturkritik
Dynamic biochemistry
Run Code Online (Sandbox Code Playgroud)

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

pol*_*nts 14

看起来你可以匹配并替换^[\d-]*\s*为空字符串.

[…]是一个角色类.类似于[aeiou]匹配任何一个小写元音的东西.\d是数字字符类的简写,因此[\d-]匹配数字或短划线.这\s是空白字符类的简写.

^线锚开始.这*是"零或多" 重复.

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

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


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
  )
);
Run Code Online (Sandbox Code Playgroud)

输出是(如ideone.com上所示):

Magazines
Numbers
Faces
Newspapers
Armynews
Celebrities 1
Celebrities 2
Cars
Glasses
Run Code Online (Sandbox Code Playgroud)

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


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

在包含字符类-内部时要小心[…],因为它可以表示范围而不是文字-字符.像[a-z]匹配小写字母的东西.类似[az-]的比赛要么'a','z''-'.

相关问题