Regex如何查找以“开始”的行块;TcxGridDBBandedColumn";,以“结束”;完";而不包括「;宽度“;在…内
我试图在dfm文件中找到不包含Width参数的TcxGridDBBandedColumn声明。 每个声明都以TcxGridDBBandedColumn开始,以end-word结束。它可以在块内有多条带多个参数的线,但不能有带宽度参数的线 我已经构建了regex来查找块:Regex如何查找以“开始”的行块;TcxGridDBBandedColumn";,以“结束”;完";而不包括「;宽度“;在…内,regex,Regex,我试图在dfm文件中找到不包含Width参数的TcxGridDBBandedColumn声明。 每个声明都以TcxGridDBBandedColumn开始,以end-word结束。它可以在块内有多条带多个参数的线,但不能有带宽度参数的线 我已经构建了regex来查找块: ^.*TcxGridDBBandedColumn(.|[\r\n])*?end 它看起来工作正常,但我找不到如何添加条件以排除指定了宽度参数的块 文本示例: object cxGrid_MainDBBand
^.*TcxGridDBBandedColumn(.|[\r\n])*?end
它看起来工作正常,但我找不到如何添加条件以排除指定了宽度参数的块
文本示例:
object cxGrid_MainDBBandedTableView1SUMA: TcxGridDBBandedColumn
Caption = 'Suma'
DataBinding.FieldName = 'SUMA'
RepositoryItem = Form_Resursai.cxEditRepository_MainCurrencyItem_DefKaina
Position.BandIndex = 1
Position.ColIndex = 7
Position.RowIndex = 0
end
object cxGrid_MainDBBandedTableView1DBABSTRMAZMKAINA: TcxGridDBBandedColumn
Caption = 'Ma'#382'm.Kaina'
DataBinding.FieldName = 'MAZMKAINA'
RepositoryItem = Form_Resursai.cxEditRepository_MainCurrencyItem_DefKaina
Visible = False
Width = 60
Position.BandIndex = 0
Position.ColIndex = 6
Position.RowIndex = 0
end
它应该只找到块:
object cxGrid_MainDBBandedTableView1SUMA: TcxGridDBBandedColumn
Caption = 'Suma'
DataBinding.FieldName = 'SUMA'
RepositoryItem = Form_Resursai.cxEditRepository_MainCurrencyItem_DefKaina
Position.BandIndex = 1
Position.ColIndex = 7
Position.RowIndex = 0
end
因为它没有宽度。在您尝试的模式中,不建议使用
(.|[\r\n])*
来匹配任何字符,因为每个字符都会有一个替换。其他选项包括使用[\s\s]*?
或使点与换行符匹配
它也在重复捕获组,并且只会给您上一次迭代的捕获值,该值将是一个字符
在这种情况下,可以匹配以
TcxGridDBBandedColumn
结尾的第一行
然后,您可以匹配所有不以end
开头或包含Width=
^[^\S\r\n]*object .*\bTcxGridDBBandedColumn(?:\r?\n(?![^\S\r\n]*(?:Width =|end$)).*)*\r?\n[^\S\r\n]*end$
字符串的开头^
[^\S\r\n]*对象。*\bTcxGridDBBandedColumn
非捕获组(?:
匹配换行符并断言右边的内容不是\r?\n(?!
匹配0+个空格,然后选择[^\S\r\n]*(?:Width=| end$)
或Width=
end
匹配任意字符0+次*
关闭组并重复0多次以匹配所有行)*
匹配换行符、可选空格和\r?\n[^\S\r\n]*end
end
字符串结尾$
您可以通过匹配所有不以属性或
Width=
或end
开头的行(如果总是以object
开头),使匹配更加具体,您也可以在模式中使用该行<代码>^[^\S\r\n]*对象。*\bTcxGridDBBandedColumn(?:\r?\n(?![^\S\r\n]*(?:Width=| end$)。)*\r?\n[^\S\r\n]*end$谢谢。行得通,不客气。我已将其添加为