在PowerShell中与“ \ n”匹配时出现问题

我正在Codewars上练习PowerShell。我目前正在与this rather easy exercise挣扎。

我的问题是我的匹配项未正确匹配,或者我不了解输入是哪种字符串。我正在尝试查找设置为给定数字的数据。 输入是一个字符串,代表电话簿。每组中的信息都是随机的。

所以我已经尝试在每个新行(-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"

(My Regex online)

我希望得到这样的结果:

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

但是我得到了:

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

在此结果之后,我也尝试过再次匹配或拆分,但这也不起作用。

wuzesc 回答:在PowerShell中与“ \ n”匹配时出现问题

.*是贪婪的比赛。您想要的是一个非贪婪匹配(.*?),其开头是一个尖括号,包括电话号码,然后以文字反斜杠和字符“ 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
,

我已导入您的输入文本(完整保留\ n个字符),并编写了与regex匹配的这一行:

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

现在可能会发生,如果您从文件中加载实际的电话地址数据,则可能需要指定换行符,例如Wiktor Stribizew所说的"`n"

本文链接:https://www.f2er.com/3137849.html

大家都在问