我有以下用Swift 3编写的简单代码:
let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)
Run Code Online (Sandbox Code Playgroud)
从Xcode 9 beta 5,我得到以下警告:
'
substring(to:)'已被弃用:请使用String带有'partial range from'运算符的切片下标.
如何在Swift 4中使用具有部分范围的切片下标?
我想从匹配正则表达式模式的字符串中提取子字符串.
所以我正在寻找这样的东西:
func matchesForRegexInText(regex: String!, text: String!) -> [String] {
???
}
Run Code Online (Sandbox Code Playgroud)
所以这就是我所拥有的:
func matchesForRegexInText(regex: String!, text: String!) -> [String] {
var regex = NSRegularExpression(pattern: regex,
options: nil, error: nil)
var results = regex.matchesInString(text,
options: nil, range: NSMakeRange(0, countElements(text)))
as Array<NSTextCheckingResult>
/// ???
return ...
}
Run Code Online (Sandbox Code Playgroud)
问题是,这matchesInString提供了我的一个数组NSTextCheckingResult,其中NSTextCheckingResult.range的类型的NSRange.
NSRange是不相容的Range<String.Index>,所以它阻止我使用text.substringWithRange(...)
有没有想过如何在没有太多代码的情况下在swift中实现这个简单的事情?
在Swift中,查看字符串是否与模式匹配的简单方法是什么?
伪代码示例:
if string matches pattern ...
if string =~ pattern ...
Run Code Online (Sandbox Code Playgroud)
(我已经阅读过Swift文档并且还没有看到正则表达式的功能.我已经阅读过添加一个新的=~运算符,这是一个好主意但比我想要的更复杂,因为这是一个教学项目.我试过rangeOfString但是得到错误:'String'没有成员'rangeOfString'.我正在寻找一个Swift解决方案,即不输入NSRegularExpression.我不需要对匹配结果数据做任何事情.)
在正则表达式中,您可以将不同的匹配分组以轻松地"匹配"给定匹配.
while match != nil {
match = source.rangeOfString(regex, options: .RegularExpressionSearch)
if let m = match {
result.append(source.substringWithRange(m)
source.replaceRange(m, with: "")
}
}
Run Code Online (Sandbox Code Playgroud)
以上作品找到了一系列的匹配,但它不能告诉我这个组.例如,如果我搜索封装在""中的单词,我想匹配一个"单词",但很快就只能获取单词
是否有可能迅速这样做?
我正在使用Swift 3并尝试访问捕获的组.
let regexp = "((ALREADY PAID | NOT ALR | PROVIDER MAY | READY | MAY BILL | BILL YOU | PAID)((.|\\n)*))(( \\d+)(\\.+|-+)(\\d\\d))"
// check if some substring is in the recognized text
if let range = stringText.range(of:regexp, options: .regularExpression) {
let result = tesseract.recognizedText.substring(with:range)
}
Run Code Online (Sandbox Code Playgroud)
我希望能够提取出捕获的最后两个数字(\d\d),所以如果文本是:ALREADY PAID asfasdfadsfasdf 39.15,它将提取15.这是一个正则表达式构建器,显示我想要的内容.通常情况下,我可以做到$8第8组被提取,但我不知道如何在Swift 3中做到这一点.
我在Swift中创建一个应用程序,我需要从字符串中捕获8个数字.这是字符串:
index.php?page=index&l=99182677
我的模式是:
&l=(\d{8,})
这是我的代码:
var yourAccountNumber = "index.php?page=index&l=99182677"
let regex = try! NSRegularExpression(pattern: "&l=(\\d{8,})", options: NSRegularExpressionOptions.CaseInsensitive)
let range = NSMakeRange(0, yourAccountNumber.characters.count)
let match = regex.matchesInString(yourAccountNumber, options: NSMatchingOptions.Anchored, range: range)
Run Code Online (Sandbox Code Playgroud)
首先,我不知道NSMatchingOptions在官方的Apple库上有什么方法,我没有得到所有的.Anchored,.ReportProgress等东西.任何人都可以照亮我吗?
然后,当我print(match),那个变量([])似乎没有任何内容.
我正在使用Xcode 7 Beta 3和Swift 2.0.