【问题标题】:Powershell Regex Multiline RegexPowershell 正则表达式 多行正则表达式
【发布时间】:2019-12-18 08:32:08
【问题描述】:

我正在尝试对文件进行正则表达式。我已经尝试过这些,但我不擅长正则表达式。

  • ((\|\n.*|\n))\d.*\n\s.*[0-9]{1,3}\s
  • ((\|\n.*|\n))\d\d\d\d\d\d\d\n\s\s\s\s\s\s\s\s\s\s[0-9]{1,3}\s
  • ((\|\n.*|\n))\d{7,8}\n\s.*[0-9]{1,3}\s
  • \|\n\s.*\d{7}\n\s.*[0-9]{1,3}\s
  • ^.*\|\r?\n.*\r?\n[0-9]{1,3}$

我有一个文件有这样的行

  $00.00|0.00|0.00|||
  8360657
  68694

我要做的是弄清楚第三行在 1 到 3 位之间。如果它长于 3 位数,我不在乎。

此文件中有更多数据,对于上述 3 行的每次出现,如果我的示例中的第 3 行是 3 位或更少,我想知道所有匹配项。如何修改我的正则表达式才能正常工作?

这是我尝试过的示例代码:

$file = "C:\Users\user\Desktop\del2\file.le"
$content = gc $file -raw
$gRegex = "((\|\n.*|\n))\d{7,8}\n\s.*[0-9]{1,3}\s"
$content -match $guarantorRegex

我已经使用 regex101.com 来匹配这些,但是我没有让它在 powershell 中工作......


最后对我有用的是什么:

$file = "C:\Users\user\Desktop\del2\D2341202.le"
$content = gc $file -raw
$guarantorRegex = "\|\r?\n[ ]{10}.*\r?\n[ ]{10}[0-9]{1,3}\s"
$content | select-string -Pattern $gRegex -AllMatches | % { $_.Matches } | % { $_.Value } > "C:\Users\user\Desktop\matches.txt"

【问题讨论】:

  • 您的代码是否会始终完全匹配这三行?也有空格?三行出现之间的一致之处是什么,哪些可能不同?
  • 试试^.*\|\r?\n.*\r?\n[0-9]{1,3}$regex101.com/r/lttbzU/1
  • 在 regex101.com,所有行尾都是\n,你的文件必须有 Windows 行尾,CRLF。
  • 那么也许像^[ ]{10}.*\|\r?\n[ ]{10}.*\r?\n[ ]{10}[0-9]{1,3}$ regex101.com/r/1w8BJP/1
  • 我认为它应该可以工作demo。也许使用多行内联修饰符(?m)^[ ]{10}.*\|\r?\n[ ]{10}.*\r?\n[ ]{10}[0-9]{1,3}\$

标签: regex powershell


【解决方案1】:

如果你想匹配10个空格,你可以匹配一个带有量词[ ]{10}的空格

(方括号只是为了清楚起见)

(?m)^[ ]{10}.*\|\r?\n[ ]{10}.*\r?\n[ ]{10}[0-9]{1,3}\$
  • (?m) 内联修饰符启用多行
  • ^行首
  • [ ]{10}.*\| 匹配 10 个空格,除换行符和 | 之外的任何字符的 1 倍以上
  • \r?\n[ ]{10}.* 匹配一个换行符,10 个空格,除换行符之外的任何字符的 1 倍以上
  • \r?\n[ ]{10}[0-9]{1,3}匹配一个换行符,10个空格3位0-9
  • $ 行尾

Regex demo

请注意,\s 也将匹配换行符。

如果你想匹配除换行符以外的空格,你可以使用[^\S\r\n]{10}


如果您不想使用锚点并且末尾有一个空格字符,则可以使用适合您的模式

\|\r?\n[ ]{10}.*\r?\n[ ]{10}[0-9]{1,3}\s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多