【发布时间】: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