0

我有一个心理障碍,似乎无法弄清楚这一点,确定它很容易 0_o

我有以下字符串:“5555S1”

字符串可以包含任意数量的数字,后跟一个字母 (AZ),再跟一个数字。如何获取字母(S)的索引,以便我可以子串,以便获取字母后面的所有内容

即:5555S1 应该返回 S1

干杯

4

4 回答 4

1

您还可以检查字符的整数表示是否 >= 65 && <=90。

简单的 Python:

test = '5555Z187456764587368457638'

for i in range(0,len(test)):
    if test[i].isalpha():
            break

print test[i:]

产量:Z187456764587368457638

于 2013-10-24T04:03:50.973 回答
0

鉴于您没有说您使用哪种语言,我将选择我要回答的语言 - c#

String.Index有关更多信息,请参见http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx

为了很好的衡量,它在java中 string.indexOf

于 2013-10-24T04:01:43.277 回答
0

一种方法是遍历字符串,直到找到一个字母。

while(!isAlpha(s[i]) i++; 或者应该可以工作。

于 2013-10-24T04:02:13.220 回答
0

这不能回答你的问题,但它确实解决了你的问题。(尽管您可以使用它来计算索引)

您的问题是正则表达式 (regex) 的良好候选者

这是我之前准备的一个:

    String code = "1234A0987";

    //timeout optional but needed for security (so bad guys dont overload your server)
    TimeSpan timeout = TimeSpan.FromMilliseconds(150);


   //Magic here:
   //Pattern == (Block of 1 or more numbers)(block of 1 or more not numbers)(Block of 1 or more numbers)                      
    String regexPattern = @"^(?<firstNum>\d+)(?<notNumber>\D+)(?<SecondNum>\d+)?";
    Regex r = new Regex(regexPattern, RegexOptions.None, timeout);

    Match m = r.Match(code);
    if (m.Success)//We got a match!
    {     
        Console.WriteLine ("SecondNumber: {0}",r.Match(code).Result("${SecondNum}"));
        Console.WriteLine("All data (formatted): {0}",r.Match(code).Result("${firstNum}-${notNumber}-${SecondNum}")); 

        Console.WriteLine("Offset length (not that you need it now): {0}", r.Match(code).Result("${firstNum}").Length); 

    }

输出:

SecondNumber: 0987 
All data (formatted): 1234-A-0987 
Offset length (not that you need it now): 4

有关此示例的更多信息,请点击此处

所以你去那里你甚至可以计算出那个索引是什么。

正则表达式备忘单

于 2013-10-25T01:00:46.840 回答