解析字符串:字符前的字符串

时间:2014-11-17 03:35:24

标签: ios swift

输入:

chris@mydomain.com
steve@mydomain.com

输出:

chris
steve

我希望在@字符之前获取子字符串。在Python中,我会使用类似:myString = myString[:myString.find("@")]的东西,但我认为Swift的版本非常复杂,至少从我读过的内容来看。在这种情况下桥接到Obj-C会更好吗,因为Swift的indexOf / find函数看起来像这个混乱:Finding index of character in Swift String

这样的事情,即使它使用数组,似乎是最简单的路线:

contact = contact.componentsSeparatedByString("@")[0]

5 个答案:

答案 0 :(得分:0)

这可能对您有所帮助

let arr = split(contact, { $0 == "@"}, maxSplit: Int.max, allowEmptySlices: false)
println(arr[0])

答案 1 :(得分:0)

我相信你已经击中了头部。另一种选择是使用正则表达式来查找它。我仍然学得很快,但客观的c版本如下:

-(NSString*) parseEmailPrefix(NSString*)email{
    NSError *error = nil;
    NSString *pattern = @"([A-Z0-9a-z._%+-]+)@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
    NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                            options:0
                                                                              error:&error];
    NSTextCheckingResult *result = [expression firstMatchInString:email 
                                                      options:0
                                                        range:NSMakeRange(0, email.length)];
    return [string substringWithRange:[result rangeAtIndex:1]];
}

这在我看来更难以阅读,但它可以让您在使用时验证电子邮件。

正则表达式信用:Regex for email address

答案 2 :(得分:0)

然后有这个Obj-C片段,它更具体地解决了问题中给出的数据。 (原谅我没有翻译成Swift,仍在研究这项技能。)

NSString* email = @"chuck@norris.net";
NSURL* theURL = [NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@", email]];
NSLog(@"%@ at %@", theURL.user, theURL.host);  // yields "chuck at norris.net"

答案 3 :(得分:0)

在Swift中,Python myString[:myString.find("@")]相当于:

myString[myString.startIndex ..< find(myString, "@")!]

但是这会导致运行时错误,除非myString包含"@"

这更安全。

if let found = find(myString, "@") {
    myString = myString[myString.startIndex ..< found]
}

请注意,find()仅搜索Character,而不搜索子字符串。所以你不能:

find(myString, "@mydomain")

答案 4 :(得分:0)

这有效:

var str: String = "Hello@World"
let a = str.componentsSeparatedByString("@")
println("\(a[0])")

输出为“你好”