Как использовать Swift 5.7 RegexBuilder, чтобы найти слово после предложения

я получаю отчет отnetworksetup -listnetworkserviceorderкоманда терминала для всех сетевых служб. Возвращаемый текст выглядит следующим образом:

      An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)

(2) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)

(3) iPhone USB
(Hardware Port: iPhone USB, Device: en6)

(4) Thunderbolt Bridge
(Hardware Port: Thunderbolt Bridge, Device: bridge0)

(5) VPN (VPN2)
(Hardware Port: L2TP, Device: )

Я пытаюсь найти устройство для Wi-Fi(en1) с RegexBuilder

      
        let search = Regex {
            "Hardware Port: Wi-Fi, Device: "
            Capture {
                OneOrMore(.word)
            }
        }

        if let result = try? search.wholeMatch(in: info) {
            print("Device: \(result.1)")
        }

Это работает только в том случае, еслиHardware Port: Wi-Fi, Device: строка находится в начале текста. Если перед приведенным выше предложением есть один или несколько символов, результатом будет

Я пробовал с этим синтаксисом, и результат был таким же (nil)

              let search = /Hardware Port: Wi-Fi, Device: (\w+)/

1 ответ

Просто замените на.firstMatch.

Как подсказывает название.wholeMatchвлияет на всю строку, соответствующую литералу шаблона с начальным «^» и конечным «$»

Другие вопросы по тегам