我在String
中有一个巨大的文字。
例如"... value=word. ..."
。如果我知道string "word"
之前"value="
和"."
之后我该如何获得for str in string {
if str == "value=" {
// then get the strings until .
}
}
?
例如:
<rule name="secondLevel">
<match url="^folder/(.+)/(.+)/?$" ignoreCase="true" />
<action type="Rewrite" url="firstsecond.aspx?param1={C:1}&param2={C:2}" />
<conditions>
<add input="{UNENCODED_URL}" pattern="/folder/([^/]+)/([^/]+)/?$" />
</conditions>
</rule>
谢谢!
答案 0 :(得分:1)
您可以使用String
方法扩展sliceBetween
:
import Foundation
extension String {
func sliceFrom(start: String, to: String) -> String? {
guard let s = rangeOfString(start)?.endIndex else { return nil }
guard let e = rangeOfString(to, range: s..<endIndex)?.startIndex else { return nil }
return self[s..<e]
}
}
你会像这样使用它:
"... value=word. ...".sliceFrom("value=", to: ". ") // "word"
答案 1 :(得分:0)
最直接的方法是使用NSRegularExpression。 Tutorial
答案 2 :(得分:0)
NSRegularExpression
应解决您的问题。
要使用它,您需要先了解Regex。在您的情况下,您可以使用value=[\\w]+[^.]+
作为正则表达式模式。
以下代码将为您提供[String]
对象包含value=allCharacterBeforeFirstPeriod
let regex = try NSRegularExpression(pattern: "value=[\\w]+[^.]+", options: [])
let nsStr = str as NSString
let array = regex.matchesInString(str, options: [], range: NSMakeRange(0, nsStr.length))
let results = array.map({ nsStr.substringWithRange($0.range) })
然后,如果您只需要value=
之后的值,则可以使用其他map
函数执行此操作:
results.map({ $0.stringByReplacingOccurrencesOfString("value=", withString: "") })
我已经使用10,000个字符String
测试了代码。它在~0.3秒完成
答案 3 :(得分:0)
给出像这样的输入String
let text = "key0=value0&key1=value1&key2=value2"
你可以使用组织方法
let dict = text.characters.split("&").reduce([String:String]()) { (var result, keyValue) -> [String:String] in
let chunks = keyValue.split("=")
guard let first = chunks.first, last = chunks.last else { return result }
let key = String(first)
let value = String(last)
result[key] = value
return result
}
现在所有内容都存储在dict
内,您可以轻松访问它
dict["key2"] // "value2"