Проблемы с соответствием '\ n' в PowerShell - PullRequest
0 голосов
/ 08 ноября 2019

Я практикую PowerShell на Codewars. В настоящее время я борюсь с этим довольно простым упражнением .

Моя проблема в том, что мое совпадение не совпадает правильно, или я не понял, какая строка является входной. Я пытаюсь найти набор данных для данного числа. Ввод представляет собой строку, представляющую телефонную книгу. Информация в каждом наборе находится в случайном порядке.

Поэтому я уже пытался сначала разбить вход после каждой новой строки (-split "\n"). Не сработало, поэтому я попробовал это со спичкой. (например, -match ".*48-421-674-8974.*\n"). Теперь, что я ожидал бы в Matches, это вся информация для этого числа до следующего '\ n'. Но вместо этого я получаю набор данных, который я хотел ПЛЮС на следующей строке. Я уже пробовал \\n, \\\\n, одинарные / двойные кавычки. Но я не могу найти никакого решения самостоятельно.

Так что в настоящее время мой ввод такой:

"<Sophia Loren> +1-421-674-8974 Bern TP-46017\n <Peter O'Brien> High  
Street +1-908-512-2222; CC-47209\n"*
"<Anastasia> +48-421-674-8974 Via Quirinal Roma\n <P Salinger> 
Main  Street, +1-098-512-2222, Denver\n"*
"<C Powel> *+19-421-674-8974 Chateau des Fosses Strasbourg F-68000\n 
<Bernard >Deltheil +1-498-512-2222; Mount Av.  Eldorado\n"

И мое регулярное выражение ".*48-421-674-8974.*\\n"

(МойRegex online)

Я ожидал бы такой результат:

<Anastasia> +48-421-674-8974 Via Quirinal Roma\n

, но я получаю:

"<Anastasia> +48-421-674-8974 Via Quirinal Roma\n <P Salinger> Main Street, +1-098-512-2222, Denver\n"

Я также пытался сопоставить илиразделение снова после этого результата, но это тоже не сработало.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

.* - жадная спичка. То, что вам нужно, - это не жадное совпадение (.*?), начинающееся с открывающейся угловой скобки, включая номер телефона, и заканчивающееся буквенной обратной косой чертой и символом «n».

$inputText = @'
"<Sophia Loren> +1-421-674-8974 Bern TP-46017\n <Peter O'Brien> High Street +1-908-512-2222; CC-47209\n"*
"<Anastasia> +48-421-674-8974 Via Quirinal Roma\n <P Salinger> Main  Street, +1-098-512-2222, Denver\n"*
"<C Powel> *+19-421-674-8974 Chateau des Fosses Strasbourg F-68000\n <Bernard >Deltheil +1-498-512-2222; Mount Av. Eldorado\n"
'@

$pattern = '<.*?48-421-674-8974.*?\\n'

$inputText |
    Select-String -Pattern $pattern -AllMatches |
    Select-Object -Expand Matches |
    Select-Object -Expand Value
0 голосов
/ 08 ноября 2019

Я импортировал ваш введенный текст (сохраняя символы \ n без изменений) и записал эту строку, которая соответствует regex:

([regex]".*48-421-674-8974[a-zA-Z ]+\\n").Matches($text)

Теперь может случиться так, что если вы загрузите фактический адрес телефонаданные из файла, символ новой строки, возможно, должен быть указан как Wiktor Stribizew сказал как "`n"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...