如何从字符串中提取数值?

Posted

技术标签:

【中文标题】如何从字符串中提取数值?【英文标题】:How to Extract a Numerical Value from a String? 【发布时间】:2010-05-21 10:28:45 【问题描述】:

是否可以从字符串中提取数字。例如,我有一个字符串:

my name is shishir and my number is 98890876478

我可以从上面的字符串中提取98890876478 吗?

或者如果我的字符串是:

my name is shishir and my number is XXX98890876478XXX

在这种情况下,我可以提取 `98890876478",它在 XXX 之间。

可以这样做吗?

我收到来自服务器的消息,该消息应采用上述格式,我需要数值以进行进一步操作

编辑:

这是我尝试使用的代码:

NSString *logString = [NSString stringWithFormat:@"%@",theXML]; 
NSString *digits = [logString stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; 
NSLog(@"Message id: %i", [digits intValue]);

哪个输出:

2010-05-21 16:37:07.092 sms[5311:207] OK: message-ID XXX110103468XXX
2010-05-21 16:37:07.851 sms[5311:207] Message id: 2

我认为它返回两个,因为 size==2。我需要检索“XXX”之间的值。

【问题讨论】:

@shishir Ander 使用NSScanner 的解决方案不起作用吗? 它没有给出正确的输出,我发布了我的控制台的输出,你可以查看它。问候shishir 【参考方案1】:

我认为你需要的是 NSScanner,它可以让你取出部分字符串。

例如

int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];

【讨论】:

这是最好的方法,因为使用 -[NSString intValue] 可能会被语言环境抛弃。【参考方案2】:

您可以为此使用正则表达式:您要匹配\d+,即非零数字序列。

相关问题

Best regex library for iphone sdk app?

否则,您可以手动遍历字符串中的字符并找到任何连续的数字序列。

【讨论】:

但要注意用户名中有数字的用户...最好先查找“my number is”字符串,然后从那里开始扫描。【参考方案3】:

独立解决方案:

+ (NSString *)extractNumberFromText:(NSString *)text

  NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
  return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];

处理以下情况:

@"1234"@"1234" @"001234"@"001234" @"leading text get removed 001234"@"001234" @"001234 trailing text gets removed"@"001234" @"a0b0c1d2e3f4"@"001234"

希望这会有所帮助!

【讨论】:

【参考方案4】:

这就是我最终完成的事情

NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
----------------------------------------

NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
----------------------------------------

我已经完成了。

【讨论】:

【参考方案5】:

stringByTrimmingCharactersInSet 只是删除字符串末尾或开头的字符。

例如:“abc 10 cd”-> 10(它会起作用)

例如:“abc 10 a 1” -> “10 a 1”(它不会工作)

使用正则表达式似乎更好。

iphone sdk - Remove all characters except for numbers 0-9 from a string

编辑:

不要选择接受的答案,而是选择超过 50 票的答案

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];

【讨论】:

以上是关于如何从字符串中提取数值?的主要内容,如果未能解决你的问题,请参考以下文章

不使用任何预定义函数从字母数字字符串中提取数值

从字符串正则表达式 PHP 中提取数值 [关闭]

Hive regexp_extract 从字符串中提取数值

从字符串中提取分数、小数和数字的正则表达式[关闭]

如何使用 Pandas 从字符串中提取算术运算

根据前面的单词从段落中提取数值