gpt4 book ai didi

regex - 在字符串中向后查找属于集合的第一个子字符串(正则表达式?)

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:25 26 4
gpt4 key购买 nike

我有一组字符串 set我想找到第一次出现的一个字符串 set作为字符串的子串 string .我想从 position 向后搜索(一个整数)。

我已经编写了一个使用 for 循环的代码,但我希望能够以更紧凑的方式编写它,也许需要正则表达式。

你能帮帮我吗?

编辑。我的临时解决方案:currentPosition是由 NSTextView 给出的整数值, command是我正在操作的字符串,我现在正在做的是检查 currentPosition 后面的字符是否是" "或者如果它是字符串的最后一个 command .在这种情况下,我推断出 command 的子串从 currentPosition 开始的空间到最近的(向后方向)定界符(在我的代码中定义)。

我的问题叫做 set这是一个字符串数组,由 separators 表示, 什么是 string这是 command ,什么是position这是 currentPosition .

let currentPosition = self.selectedRange().location
let currentPositionIndex = command.index(command.startIndex,offsetBy: currentPosition)
if(currentPosition == command.characters.count || command[currentPositionIndex] == " ") {
let separatorsString = " .,:~/!+=\\;/?"
let separators = separatorsString.characters
//TODO: use regex in order to clean the code
var nearestSeparatorPosition = command.startIndex
outerloop: for i in stride(from: currentPosition - 1, to: -1, by: -1) {
for separator in separators {
let index = command.index(command.startIndex, offsetBy: i)
if(command[index] == separator) {
nearestSeparatorPosition = command.index(index, offsetBy: 1)
break outerloop
}
}
}
Swift.print("current word index = (\(command.distance(from: command.startIndex, to: nearestSeparatorPosition)),\(command.distance(from: command.startIndex, to: currentPositionIndex)))")
let currentWord = command.substring(with: nearestSeparatorPosition ..< currentPositionIndex)

最佳答案

我不确定我是否有一些事情发生了变化,但根据我对你的问题的理解,我会这样做:

func findFirstContaining(needle item: String, in haystack: [String]) -> String? {

let stringRanges: [Range<String.Index>] = haystack.flatMap { return item.range(of: $0) } .sorted { $0.lowerBound < $1.lowerBound }
if let range = stringRanges.first {
return item.substring(with: range)
}
else {
return nil
}
}

let testSet: Set<String> = ["test", "string", "set"]

let needle = "this is a test"

// evaluates to "test"
let result = findFirstContaining(needle: needle, in: testSet.sorted())

let reversedResult = findFirstContaining(needle: needle, in: testSet.sorted().reversed())

这可能效率低下,但我不确定您要解决什么问题。

关于regex - 在字符串中向后查找属于集合的第一个子字符串(正则表达式?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com