我有一个心理障碍,似乎无法弄清楚这一点,确定它很容易 0_o
我有以下字符串:“5555S1”
字符串可以包含任意数量的数字,后跟一个字母 (AZ),再跟一个数字。如何获取字母(S)的索引,以便我可以子串,以便获取字母后面的所有内容
即:5555S1 应该返回 S1
干杯
您还可以检查字符的整数表示是否 >= 65 && <=90。
简单的 Python:
test = '5555Z187456764587368457638'
for i in range(0,len(test)):
if test[i].isalpha():
break
print test[i:]
产量:Z187456764587368457638
鉴于您没有说您使用哪种语言,我将选择我要回答的语言 - c#
String.Index
有关更多信息,请参见http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx
为了很好的衡量,它在java中 string.indexOf
一种方法是遍历字符串,直到找到一个字母。
while(!isAlpha(s[i]) i++; 或者应该可以工作。
这不能回答你的问题,但它确实解决了你的问题。(尽管您可以使用它来计算索引)
您的问题是正则表达式 (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
有关此示例的更多信息,请点击此处。
所以你去那里你甚至可以计算出那个索引是什么。