【发布时间】:2012-06-21 23:10:26
【问题描述】:
例如,我有一个可以随时更改的字符串,我只想要其中的字母文本:
法拉利 5 10 15000 -5 0.2
所以我想要“法拉利”。
有时“法拉利”和数字之间不会有空格。
【问题讨论】:
例如,我有一个可以随时更改的字符串,我只想要其中的字母文本:
法拉利 5 10 15000 -5 0.2
所以我想要“法拉利”。
有时“法拉利”和数字之间不会有空格。
【问题讨论】:
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()。意图很明确。
使用正则表达式,您可以像这样匹配首字母
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);
【讨论】:
你可以使用
String s = Regex.Match(str, @"[a-zA-Z]+").Value;
【讨论】:
一种选择是转换为 char 数组并提取字母,然后再转换回字符串:
string text = "Ferrari 5 10 15000 -5 0.2";
string alphas = string.Join( "", text.ToCharArray().Where( char.IsLetter ) );
【讨论】:
这是正则表达式派上用场的时候之一:
Regex wordMatcher = new Regex("[a-zA-Z]+");
foreach(Match m in wordMatcher.Matches("Ferrari 55 100000 24 hello"))
MessageBox.Show(m.Value);
基本上,RegEx 所做的只是尝试匹配 a-z 之间的字母组,忽略大小写。
【讨论】:
如果它总是以[数字、-、.和空格]结尾,你可以使用.TrimEnd:
record.TrimEnd("0123456789 .-".ToCharArray());
...或者如果您关心的文本中没有空格,您可以阅读到第一个空格...
var whatINeed = new string(record.TakeWhile(c => c != ' ').ToArray());
...或者在空格上拆分时只取第一项...
var whatINeed = record.Split().First();
【讨论】: