내 문자열에서 반복되는 부분 문자열을 제거하는 함수를 생각할 수 없습니다. 내 문자열은 다음과 같습니다.
"<bold><bold>Rutger</bold> Roger</bold> rented a <bold>testitem zero dollars</bold> from <bold>Rutger</bold>."
그리고 <bold>
다른 것이 뒤 <bold>
따르면 두 번째를 제거하고 싶습니다 <bold>
. 그 두 번째를 제거 할 때 다음 <bold>
첫 번째도 제거하고 싶습니다 </bold>
.
따라서 내가 찾고있는 출력은 다음과 같아야합니다.
"<bold>Rutger Roger</bold> rented a <bold>testitem zero dollars</bold> from <bold>Rutger</bold>."
누구든지 Swift (2.2)에서 이것을 달성하는 방법을 알고 있습니까?
태그가 중첩 된 콘텐츠에 1 회 이상 표시되지 않는다는 가정하에 정규식을 사용하여 솔루션을 작성했습니다. 즉, 그 이상이 아닌 이중 태그를 정리합니다. 동일한 코드와 재귀 호출을 사용하여 원하는만큼 중첩 된 반복 태그를 정리할 수 있습니다.
class Cleaner {
var tags:Array<String> = [];
init(tags:Array<String>) {
self.tags = tags;
}
func cleanString(html:String) -> String {
var res = html
do {
for tag in tags {
let start = "<\(tag)>"
let end = "</\(tag)>"
let pattern = "\(start)(.*?)\(end)"
let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
let matches = regex.matches(in: res, options: [], range: NSRange(location: 0, length: res.utf16.count))
var diff = 0;
for match in matches {
let outer_range = NSMakeRange(match.rangeAt(0).location - diff, match.rangeAt(0).length)
let inner_range = NSMakeRange(match.rangeAt(1).location - diff, match.rangeAt(1).length)
let node = (res as NSString).substring(with: outer_range)
let content = (res as NSString).substring(with: inner_range)
// look for the starting tag in the content of the node
if content.range(of: start) != nil {
res = (res as NSString).replacingCharacters(in: outer_range, with: content);
//for shifting future ranges
diff += (node.utf16.count - content.utf16.count)
}
}
}
}
catch {
print("regex was bad!")
}
return res
}
}
let cleaner = Cleaner(tags: ["bold"]);
let html = "<bold><bold>Rutger</bold> Roger</bold> rented a <bold><bold>testitem</bold> zero dollars</bold> from <bold>Rutger</bold>."
let cleaned = cleaner.cleanString(html: html)
print(cleaned)
//<bold>Rutger Roger</bold> rented a <bold>testitem zero dollars</bold> from <bold>Rutger</bold>.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다