我有一个文字
var txt =“+ abcc @gmail.com heyyyyy cool + def@gmail.com”
我想从文本中提取电子邮件地址并将其存储在数组中。我想用正则表达式来做。我找到了正则表达式,但我无法将电子邮件保存到数组中。
我试过
let regEx = "/(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi"
if let email = NSPredicate(format: "SELF MATCHES %@", regEx) {
//what to do here
}
或者我做错了? 我知道这是一个基本问题。请帮忙
提前致谢。
答案 0 :(得分:3)
我建议使用NSRegularExpression
类而不是NSPredicate
。正则表达式的格式来自ICU。
这是一种方法:
let pattern = "(\\+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)"
let regexp = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: nil)
let str = "+abc@gmail.com heyyyyy cool +def@gmail.com" as NSString
var results = [String]()
regexp?.enumerateMatchesInString(str, options: NSMatchingOptions(0), range: NSRange(location: 0, length: str.length), usingBlock: { (result: NSTextCheckingResult!, _, _) in
results.append(str.substringWithRange(result.range))
})
// Gives [+abc@gmail.com, +def@gmail.com]
答案 1 :(得分:2)
这些代码对我有用。您可以从here结帐电子邮件正则表达式。
func extractEmailAddrIn(text: String) -> [String] {
var results = [String]()
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
let nsText = text as NSString
do {
let regExp = try NSRegularExpression(pattern: emailRegex, options: NSRegularExpressionOptions.CaseInsensitive)
let range = NSMakeRange(0, text.characters.count)
let matches = regExp.matchesInString(text, options: .ReportProgress, range: range)
for match in matches {
let matchRange = match.range
results.append(nsText.substringWithRange(matchRange))
}
} catch _ {
}
return results
}
答案 2 :(得分:0)
看起来你的正则表达式名称是错误的。您将其声明为regEx
,但在NSPredicate
中使用emailRegEx
。
答案 3 :(得分:0)
您是否需要邮件地址中的加号?
地址中没有+号:
([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)
结果:[" abc@gmail.com" ;," def@gmail.com"]
在地址中加号:
([\\+a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)
结果:[" +abc@gmail.com" ;," + def@gmail.com"]
答案 4 :(得分:0)
这是我创建的String扩展名,用于从中提取电子邮件。它在Swift 4中运行良好。
extension String {
func getEmails() -> [String] {
if let regex = try? NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}", options: .caseInsensitive)
{
let string = self as NSString
return regex.matches(in: self, options: [], range: NSRange(location: 0, length: string.length)).map {
string.substring(with: $0.range).replacingOccurrences(of: "", with: "").lowercased()
}
}
return []
}
}
用法
let test = "Precision Construction John Smith cONSTRUCTION WORKER 123 Main St, Ste. 30o
www.precsioncontructien.com adil@gmail.com fraz@gmail.pk janesmit@precisiencenstruction.com 555.555.5SS5"
let emails = test.getEmails()
print(emails)
//结果[“ adil@gmail.com”,“ fraz@gmail.pk”,“ janesmit@precisiencenstruction.com”]