我正在处理字符串列表,但我想改变字符串,这样它们对用户来说看起来并不丑陋。一个示例列表是
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
我想到的规则是,如果只有大写字母,数字和 - 或+之前的符号 - 它只对机器有意义,而不是一个真正的单词,因此应该被剥离,我不知道如何在正则表达式中表达这一点。
答案 0 :(得分:14)
看起来您可以使用空字符串匹配并替换^[\d-]*\s*
。
[…]
是character class。像[aeiou]
这样的东西匹配任何一个小写元音。 \d
是数字字符类的简写,因此[\d-]
匹配数字或短划线。 \s
是空白字符类的简写。
^
是beginning of the line anchor。 *
为“零或多”repetition。
因此,模式在一行的开头匹配一系列数字或破折号,后跟一系列空格。
从问题中不清楚,但如果输入是多行文本(而不是一次只应用一行正则表达式),那么您也需要启用multiline mode。
以下是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)
如果每行都有数字(有或没有),你可以在空格上分割线条,排除第一块然后再加入。