如何从字符串中提取非数字文本

3
例如,我有一个字符串,它随时可能会改变,我只想从中获取字母文本:

Ferrari 5 10 15000 -5 0.2

所以我想要的是 "Ferrari"。
有时 "Ferrari" 和数字之间不会有空格。
6个回答

6
string str = "Ferrari 5 10 15000 -5 0.2";
string text = Regex.Match(str, @"[a-zA-Z\s]+").Value.Trim();

通过同时匹配空格并修剪结果,它将在字符串 "Some Car 5 10 ..." 中匹配到 "Some Car"

使用 @"\b[a-zA-Z\s]+\b" 返回 "Ferrari "。添加复杂性的原因(允许空格并修剪)是我认为多词“列”可能有用,因此我允许模式中的空格。您可能可以使用前瞻或其他方法使其在不获取额外空间的情况下工作,但就个人而言(没有其他原因),我更喜欢 .Trim()。意图很明确。 - Tim S.

1

使用正则表达式,您可以轻松匹配初始字母,如下所示

string text = "Ferrari 5 10 15000 -5 0.2";
string pat = @"([a-z]+)";

// Instantiate the regular expression object.
Regex r = new Regex(pat, RegexOptions.IgnoreCase);

// Match the regular expression pattern against a text string.
Match m = r.Match(text);

1
如果字符串总是以数字、破折号、句点和空格结尾,您可以使用 .TrimEnd 方法:
record.TrimEnd("0123456789 .-".ToCharArray());

...或者如果您关心的文本中没有空格,则可以读取到第一个空格...

var whatINeed = new string(record.TakeWhile(c => c != ' ').ToArray());

... 或者只需在空格上拆分时获取第一个项目...

var whatINeed = record.Split().First();

1

你可以使用

String s = Regex.Match(str, @"[a-zA-Z]+").Value;

1
一种选择是将其转换为字符数组并提取字母,然后再转换回字符串:
string text = "Ferrari 5 10 15000 -5 0.2";
string alphas = string.Join( "", text.ToCharArray().Where( char.IsLetter ) );

1
这是正则表达式派上用场的时候之一:
Regex wordMatcher = new Regex("[a-zA-Z]+");
foreach(Match m in wordMatcher.Matches("Ferrari 55 100000 24 hello"))
    MessageBox.Show(m.Value);

基本上,正则表达式所做的就是尝试匹配 a-z 之间的字母组,忽略大小写。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接