Regex 关于正则表达式
我尝试在Regex 关于正则表达式,regex,powershell,Regex,Powershell,我尝试在$[文本之间切换。 我尝试使用下面的正则表达式解决此问题: $pattern = "(?=\$\[)(.*?)(?=\$\[)" 但直到新生产线的前端才开始。 举例来说,这并不是一件容易的事 “在Fonet.Common.DicomNet.DicomAttributeCollection.Load(DicomDataSet ds)上” 我如何解决这个问题 $[WARN]01.02.2019 09:14:14未找到ScheduledProcess序列 $[错误]01.02.2019 11
$[
文本之间切换。
我尝试使用下面的正则表达式解决此问题:
$pattern = "(?=\$\[)(.*?)(?=\$\[)"
但直到新生产线的前端才开始。
举例来说,这并不是一件容易的事
“在Fonet.Common.DicomNet.DicomAttributeCollection.Load(DicomDataSet ds)上”
我如何解决这个问题
$[WARN]01.02.2019 09:14:14未找到ScheduledProcess序列
$[错误]01.02.2019 11:09:02对象引用未设置为
对象的实例。System.NullReferenceException对象引用
未设置为对象的实例。Void
加载(Leadtools.Dicom.DicomDataSet)System.NullReferenceException:
对象引用未设置为对象的实例。位于
Fonet.Common.DicomNet.DicomAttributeCollection.Load(DicomDataSet ds)在Fonet.Common.DicomNet.DicomAttributeCollection.Load(DicomDataSet)中 ds)$[ERROR]01.02.2019 11:09:02工作列表异常:对象 引用未设置为对象的实例。 System.NullReferenceException对象引用未设置为实例 无效加载(Leadtools.Dicom.Dicom数据集) System.NullReferenceException:对象引用未设置为实例 指一个物体 Fonet.Common.DicomNet.DicomAttributeCollection.Load(DicomDataSet ds) 正则表达式中的点(
)运算符通常匹配除换行符以外的任何单个字符。要匹配这些字符,您需要添加s
标志,使匹配器将输入视为一行
使用(?s)
可以最简单地完成此操作。这将为整个模式设置标志,因此如果将其嵌入到较大的模式中,请小心
$pattern = "(?s)(?=\$\[)(.*?)(?=\$\[)"
另外,在两侧使用look aheads((?=)
)和使用零个或多个惰性重复(*?
)的副作用是,它将始终匹配零个字符。您需要更改以下任一项:
- 看看后面:
(?s)(?我刚试过这个,但它不能像我想的那样工作。我找到了一种不同的方法
$allErrors = New-Object System.Collections.ArrayList $str = ""; foreach($log in $logs) { if($log -match "(?=\$\[)") { $allErrors.Add($object); $str = "" $str = $log $object = New-Object psobject $object | Add-Member -MemberType NoteProperty -Name AlarmText -Value $str Write-Host $str -ForegroundColor Yellow } else { $str += $log $object.AlarmText = $str; Write-Host $str -ForegroundColor Red } }
当我发现一个新错误时,我正在创建新对象。然后我在对象上插入行,直到发现新错误。我的问题通过这种方式解决了。谢谢您的帮助。您的代码太不完整,无法回答问题。请说明您如何读取输入数据以及如何对其应用正则表达式。此外,我怀疑您的输入数据实际上看起来像您提供的示例(为了适应此处内容部分的宽度,它似乎被包装在任意位置。请复制/粘贴完全相同的样本数据。您可能会混淆敏感信息,但不要更改格式。第一个积极的前瞻应该是积极的前瞻。更改
至(?=\$\[)(.*)(?=\$\[)
(?)?