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
            }
        }
    

    当我发现一个新错误时,我正在创建新对象。然后我在对象上插入行,直到发现新错误。我的问题通过这种方式解决了。谢谢您的帮助。

    您的代码太不完整,无法回答问题。请说明您如何读取输入数据以及如何对其应用正则表达式。此外,我怀疑您的输入数据实际上看起来像您提供的示例(为了适应此处内容部分的宽度,它似乎被包装在任意位置。请复制/粘贴完全相同的样本数据。您可能会混淆敏感信息,但不要更改格式。第一个积极的前瞻应该是积极的前瞻。更改
    (?=\$\[)(.*)(?=\$\[)
    (?)?