Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在特定字符串处停止正则表达式并捕获子字符串?_Ios_Swift_Regex - Fatal编程技术网

Ios 如何在特定字符串处停止正则表达式并捕获子字符串?

Ios 如何在特定字符串处停止正则表达式并捕获子字符串?,ios,swift,regex,Ios,Swift,Regex,我想捕获正则表达式的两个匹配项之间的字符串 我有这根绳子 var testingString="NO Lettuce nNO Onions nNO Tomato nNO Ketchup NO Grilled Onions NO baked Sub Zapps" 我现在使用的正则表达式是: let matches = self.regexMatches(for: "([^\\snNO]+|[NO]\\S+([a-zA-Z0-9_\\w+])+\\S)", in: testingString)

我想捕获正则表达式的两个匹配项之间的字符串

我有这根绳子

var testingString="NO Lettuce nNO Onions nNO Tomato nNO Ketchup NO  Grilled Onions NO baked Sub Zapps"
我现在使用的正则表达式是:

let matches = self.regexMatches(for: "([^\\snNO]+|[NO]\\S+([a-zA-Z0-9_\\w+])+\\S)", in: testingString)
我得到的输出是:

Lettuce Onions Tomato Ketchup Grilled Onions baked sub zapps 生菜 洋葱 西红柿 番茄酱 烤的 洋葱 烤 附属的 扎普斯 但我希望输出为:

Lettuce Onions Tomato Ketchup Grilled Onions baked sub zapps 生菜 洋葱 西红柿 番茄酱 烤洋葱 烤面包 这是我正在使用的regexMatches函数:

func regexMatches(for regex: String, in text: String) -> [String] {
    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
        var tempResults = results.map { result in
            (1..<result.numberOfRanges - 1).map { result.rangeAt($0).location != NSNotFound
                ? nsString.substring(with: result.rangeAt($0))
                : ""
            }
        }
        return tempResults.flatMap{$0}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}
func regexMatches(对于regex:String,在text:String中)->[String]{
做{
让regex=尝试NSRegularExpression(模式:regex)
设nsString=文本为nsString
让results=regex.matches(in:text,range:NSRange(位置:0,长度:nsString.length))
var tempResults=results.map{result in

(1..我会做得简单得多。只需将
nNO
NO
替换为拆分字符,并在其上拆分。现在修剪空白,删除任何空拆分,就完成了

let s = "NO Lettuce nNO Onions nNO Tomato nNO Ketchup NO  Grilled Onions NO baked Sub Zapps"
let pattern = "\\bn?NO\\b"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let s2 = regex.stringByReplacingMatches(in: s, options: [], range: NSRange(location: 0, length: s.utf16.count), withTemplate: "|")
let arr = s2.split(separator: "|", omittingEmptySubsequences: true)
    .map{$0.trimmingCharacters(in: .whitespaces)}
// ["Lettuce", "Onions", "Tomato", "Ketchup", "Grilled Onions", "baked Sub Zapps"]

我会做得简单得多。只需将
nNO
NO
替换为拆分字符,然后对其进行拆分。现在删除空白,删除任何空拆分,就完成了

let s = "NO Lettuce nNO Onions nNO Tomato nNO Ketchup NO  Grilled Onions NO baked Sub Zapps"
let pattern = "\\bn?NO\\b"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let s2 = regex.stringByReplacingMatches(in: s, options: [], range: NSRange(location: 0, length: s.utf16.count), withTemplate: "|")
let arr = s2.split(separator: "|", omittingEmptySubsequences: true)
    .map{$0.trimmingCharacters(in: .whitespaces)}
// ["Lettuce", "Onions", "Tomato", "Ketchup", "Grilled Onions", "baked Sub Zapps"]


为什么有些值有“n”而有些没有?是否要匹配前面有
NO
nNO
的任何内容?大写字母是否重要?在我看来,您似乎对这项任务考虑太多了。为什么不搜索一个更简单的模式-
NO
,可能前面有
n
,然后替换为您需要的内容然后可以拆分字符串吗?然后修剪拆分的组件,就完成了。是的,大写和小写很重要。我是编程的初学者。你能帮我怎么做吗?为什么有些值有“n”而有些没有?你想匹配前面有
nNO
的任何内容吗?大写很重要吗?它很重要吗在我看来,你似乎对这项任务想得太多了。为什么不搜索一个简单得多的模式-
NO
,前面可能有
n
,然后替换为可以拆分字符串的模式?然后修剪拆分的组件,就完成了。是的,大写和小写都很重要。我是编程新手。你能e帮助我如何做?只使用
let pattern=“(\\s*n?NO\\s*)”let replaced=testingString.replacingOccurrences(of:pattern,with:“\n”,options:.regularExpression)怎么样
?不需要使用引入的分隔符。事实上,要检查正则表达式可能会更费时。好吧,@Larme,当然你可以这样做,但你只是将拆分向后推了一步。OP迟早会想要拆分(他的打印输出只是一个工件),所以我们不妨先做一下。@Larme我在这里真正想做的是拆分。因此,作为一个给定条件,我试图解决的问题是Swift
split
不采用正则表达式模式,这与带有“real”的语言不同字符串处理,比如ruby。我的方法只是解决这个问题的一个方法。如果这是ruby,我会在没有引入任何分隔符的情况下进行拆分。如果我在没有之前有破折号呢?比如-没有烤洋葱-。我如何删除它?然后你问错了问题。我只能回答你实际提出的问题。提供正确的规范是你的问题。W关于仅使用
let pattern=“(\\s*n?NO\\s*)”let replacement=testingString.replacingOccurrences(of:pattern,with:“\n”,options:.regularExpression)
?不需要使用引入的分隔符。事实上,要检查正则表达式可能会更费时。好吧,@Larme,当然你可以这样做,但你只是将拆分向后推了一步。OP迟早会想要拆分(他的打印输出只是一个工件),所以我们不妨先做一下。@Larme我在这里真正想做的是拆分。因此,作为一个给定条件,我试图解决的问题是Swift
split
不采用正则表达式模式,这与带有“real”的语言不同字符串处理,比如ruby。我的方法只是一个解决方法。如果这是ruby,我会在没有引入任何分隔符的情况下进行拆分。如果我在没有之前使用破折号呢?比如-没有烤洋葱-。我如何删除它?然后你问错了问题。我只能回答你实际提出的问题。提供正确的规范是你的问题。