我正在处理一个字符串列表,但我想改变字符串,以便它们对用户来说看起来并不丑陋.一个示例列表将是
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#中的示例代码段:
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'
或'-'
.