在任何第一个数字之前拆分字符串
Posted
技术标签:
【中文标题】在任何第一个数字之前拆分字符串【英文标题】:Split string before any first number 【发布时间】:2017-06-02 19:22:29 【问题描述】:string test = " Puerto Rico 123 " ;
我只想获得"Puerto Rico"
。这个想法是,它可以是任何数字,而不是123
。我怎样才能做到这一点?
【问题讨论】:
你能提供更多输入输出的例子吗?您似乎正在修剪空格,不清楚(或者可以说它是 broad)您使用哪种模式来获得结果。 Find index of number from a string in C#的可能重复 【参考方案1】:如果数字只出现在字符串的末尾,则可以进行简单的修剪:
var result = "Puerto Rico 123".TrimEnd(" 1234567890".ToCharArray());
或
string source ="Puerto Rico 123";
char[] toBeRemoved = " 1234567890".ToCharArray(); <-- note the whitespace...
string result = source.TrimEnd(toBeRemoved); <-- remove the chars at the end of the source
【讨论】:
和我的回答一样 @Kees de Wit 您刚刚编辑了您的答案(顺便说一句,这是错误的)并复制了这个。你的目标是什么??? 我只是将 char 数组的 init 替换为您的方法。事实上,我们有相同的答案。 如果输入只有一个尾随数字(如问题中的"Puerto Rico 123"
),这是一个最好的解决方案;但是,如果数字可以出现在 中间 的某处(例如"Puerto Rico 123 Alas!"
),则它不起作用。这个问题是模糊的,这个解读是可能的 (+1),但是,请在你的回答中提及你的愿景。【参考方案2】:
您可以像这样使用Regex
:
Regex MyRegex = new Regex("[^a-z A-Z.]", RegexOptions.IgnoreCase);
string s = MyRegex.Replace(@" Puerto Rico 123 ", @"");
Console.WriteLine(s);
【讨论】:
【参考方案3】:您可以按照建议使用正则表达式,但您也可以尝试使用这个:
var str = " Puerto Rico 123 ";
var firstDigit = str.FirstOrDefault(c => char.IsDigit(c));
if (firstDigit != default(char))
var substring = str.Substring(0, str.IndexOf(firstDigit));
如果有,则返回字符串中第一个数字的值,如果字符串中没有数字,则返回“\0”。之后,我们检查第一个数字是否不是 '\0',如果是,我们将初始字符串的子字符串从开始直到第一次出现在字符串中。
【讨论】:
波多黎各部分有号码时会失败 @KeesdeWit 问题是,在任何第一个数字之前拆分字符串,这正是这样做的。不是吗? :) 不,那不是问题。这是“我只想获得“波多黎各”的问题。这个想法是,它可以是任何数字,而不是 123。我怎样才能做到这一点?您在第一个数字之前看到任何关于拆分的明确信息吗?【参考方案4】:我建议使用 正则表达式,这在上下文中非常容易:从字符串的开头 ^
获取所有非数字 [^0-9]*
字符:
string test = " Puerto Rico 123 ";
string result = Regex.Match(test, @"^[^0-9]*").Value;
Linq 是一个替代方案:
string result = string.Concat(test.TakeWhile(c => c < '0' || c > '9'));
如果您想修剪前导和尾随空格(并以"Puerto Rico"
作为答案,而不是" Puerto Rico "
),只需添加.Trim()
,例如:
string result = Regex.Match(test, @"^[^0-9]*").Value.Trim();
【讨论】:
您也可以在Value
上调用Trim
删除前导和尾随空格。
@Abion47:谢谢!我明白了:由于问题建议 "Puerto Rico"
- 修剪过的字符串 - 作为答案,所以最终的 .Trim()
很可能是强制性的。
波多黎各部分有号码时会失败
@Kees de Wit:它不会失败;如果"Puerto 123 Rico"
结果"Puerto "
是预期的行为:“拆分字符串之前 任何第一个数字”。并且“任何第一个数字之前的字符串”是"Puerto "
,而“第一个数字”是123
@Kees de Wit:在"Pu3rto Rico"
上,结果是"Pu"
,这是预期的行为【参考方案5】:
你可以用这样的正则表达式来做到这一点:
Match match = Regex.Match("Puerto Rico 123", @"^.*?(?=\d)");
string text = match.Value;
【讨论】:
以上是关于在任何第一个数字之前拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章