/ / NSRegularExpression per estrarre sottoinsieme di testo in Swift 3 - regex, swift3, nsregularexpression

NSRegularExpression per estrarre sottoinsiemi di testo in Swift 3 - regex, swift3, nsregularexpression

Sto cercando di usare NSRegularExpression (pattern: regex) per estrarre 10.32.15.235 in una stringa: "IPAddress": "10.32.15.235", "WAN" usando Swift 3.

Tuttavia, sto ottenendo un errore utilizzando questa funzione da questo risposta

func matches(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))
return results.map { nsString.substring(with: $0.range)}
} catch let error {
print("invalid regex: (error.localizedDescription)")
return []
}
}

Con questa chiamata:

        let pattern = "IPAddress\":\"(.+?)\"
let IPAddressString = self.matches(for: pattern, in: stringData!)
print(IPAddressString)

Tuttavia, la parte di errore della funzione viene chiamata con questo errore:

regex non valida: il valore "Indirizzo IP": "(. +?)" non è valido.

Puoi aiutarmi a modificare l'espressione regolare per Swift 3?

Grazie

risposte:

0 per risposta № 1

Si noti che nel caso in cui si disponga di un JSON valido, è possibile utilizzare un parser JSON con Swift.

Per correggere il tuo attuale approccio regex, puoi usare

let pattern = "(?<=IPAddress":")[^"]+"

Dettagli del modello

  • (?<=IPAddress":") - un lookahead positivo che corrisponde a una posizione nella stringa subito dopo IPAddress":" sottostringa
  • [^"]+ - una classe di caratteri negata che corrisponde a 1 o più caratteri diversi da "

Vedere il regex demo.