设置:UITextField和包含建议用户的Tableview 我尝试得到以下结果:
我希望用户能够链接其他用户。 只要我用数组中的最后一个单词搜索
,它的工作正常from bs4 import BeautifulSoup
XML = '''
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cd="http:xyz.com#">
<rdf:Description rdf:about="http:xyz.com#">
<cd:algorithmid>DPOT-5ab247867d368</cd:algorithmid>
<cd:owner>arun</cd:owner>
<cd:acesskey>ACCESS-5ab247867d370</cd:acesskey>
<cd:purpose>Research</cd:purpose>
<cd:metadata>10</cd:metadata>
<cd:completeness>Partial</cd:completeness>
<cd:completeness>Yes</cd:completeness>
<cd:inclusion_1>age</cd:inclusion_1>
<cd:feature_1>Sex</cd:feature_1>
<cd:target>Diagnosis</cd:target>
</rdf:Description>
</rdf:RDF>'''
soup = BeautifulSoup(XML, 'xml')
target = soup.find('target').text
print(target)
# Diagnosis
但是如果用户想要在中间或至少不在数组末尾调整用户名,则搜索功能无法正常工作,因为它仍然使用数组中的最后一个单词进行搜索
示例:
let caption = captionTextView.text
let words = caption?.components(separatedBy: .whitespacesAndNewlines)
guard let searchingWord = words?.last else {return}
if searchingWord.hasPrefix("@") {
self.indicator.startAnimating()
let search = searchingWord.trimmingCharacters(in: CharacterSet.punctuationCharacters).lowercased()
}
如果用户想要将“@Lisa”更改为“@Lisbeth”,搜索功能将使用Thomas搜索数组中的最后一个单词
我无法得到我正在工作的单词,只有数组中的最后和第一个单词,但是我能够使用
获取当前光标位置"Hey how are you @Lisa @Marcel @Thomas"
这是一个扩展名。
那么我如何得到我正在工作的单词,直到左边的下一个“@”和右边的下一个空格?提前谢谢!
答案 0 :(得分:0)
也许尝试这样的事情:
if let selectedRange = textview.selectedTextRange {
let cursorOffset = textview.offset(from: textview.beginningOfDocument, to: selectedRange.start)
let text = textview.text
let substring = text?.prefix(cursorOffset)
let editedWord = substring?.split(separator: "@")
}
(写在手机上,未经测试)
答案 1 :(得分:0)
一种解决方案是正则表达式
let string = "Hey how are you @Lisa @Marcel @Thomas"
let searchingWord = "Lisa"
let replacingWord = "Lisbeth"
let pattern = "@\(searchingWord)\\s"
string.replacingOccurrences(of: pattern, with: "@\(replacingWord) ", options: .regularExpression)
模式搜索@
后跟搜索词后跟空格字符。
答案 2 :(得分:0)
既然你说事情按你想要的方式工作,如果最后一个字是带有用户名的那个,你只需要遍历所有的字。根据您的需要,您可能需要跟踪文本中的用户名,以免多次搜索同一用户,但是一组使用过的用户名应该为您排序。
此外,除非您想要阻止用户使用下划线以及名称中的下划线,否则您应该调整删除@
符号的方式。
guard let words = captionTextView.text?.components(separatedBy: .whitespacesAndNewlines) else { return }
for word in words where word.hasPrefix("@") {
self.indicator.startAnimating()
let search = word.replacingOccurrences(of: "@", with: "").lowercased()
}
将上述代码粘贴到一个操场上,该操场使用您提供的示例字符串代替captionTextView.text?
并每次打印search
...
lisa
marcel
thomas