与Regex合作,遇到了麻烦。
$AddressEdit = Select-String "c:\utilities\AddressStaged.txt" -pattern "^(?!<img src)" | Select Line | Out-File "c:\utilities\Address.txt"
上面返回了我需要的一些数据。但是,文本文件中有一行总是在返回该行之后立即出现,我也希望将其包含在新文档中。
我的问题:正则表达式是否有办法说“抓住这条线以及从模式结果中找到的那条数据的正下方”?
是的,您可以使用-Raw param of将RegEx与多行匹配一起使用Get-Content
。
对于技术可行性,我给出此答案,从操作角度来看,您应该遵循@TheMadTechnician或@David Brabant的建议。
这是一个XML文件(M.txt):
<?xml version="1.0" encoding="utf-8"?>
<Machines xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Machine>
<Nom>JPBHPP2.marceau.fr</Nom>
<IP>192.168.2.61</IP>
<Creation>2014-06-05T06:35:25.2318584+02:00</Creation>
<Masque-IPv4>255.255.255.0</Masque-IPv4>
</Machine>
<Machine>
<Nom>JPBASUSF2.marceau.fr</Nom>
<IP>192.168.2.81</IP>
<Creation>2014-06-05T06:35:20.7676768+02:00</Creation>
<Masque-IPv4>255.255.255.0</Masque-IPv4>
</Machine>
</Machines>
现在将文件作为单个字符串加载:
$a = Get-Content D:\temp\M1.xml -Raw
然后尝试此RegEx:
$reg = [regex]'(?sm) (<Nom>.*?</Nom>\r\n.*?\r\n)'
它给 :
$reg.Matches($a).count # gives 2
$reg.Matches($a).Groups[0].value
# gives
# <Nom>JPBHPP2.marceau.fr</Nom>
# <IP>192.168.2.61</IP>
已更新为回答您的问题:是否可以以正则表达式开始并以正则表达式结束并收集所有内容?这是一种在<Nom>
和之间取整的方法</IP>
。
$reg = [regex]'(?sm)(<Nom>.*?</IP>)'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句