我必须使用正则表达式从文本中收集两个信息。然后将名称和数据库及其关联在一个表中。但是一个只能收集然后单独收集。
这是一个示例,我有很多这样的块,然后有两个没有数据库值,这些我需要忽略
[SCD] {I need the name between []}
Driver=/opt/pcenter/pc961/ODBC7.1/lib/DWmsss27.so
Description=
Database=scd {I need the value after Defaut|Database}
Address=#######
LogonID=######
Password=######
QuoteId=No
AnsiNPW=No
ApplicationsUsingThreads=1
查找名称的正则表达式为:
(?<=\[)(.*)(?=\])
在数据库为
后查找值的正则表达式(?<=Defaut|Database=)(.*)
我如何将两者都合并到onde regex中?
答案 0 :(得分:1)
要同时匹配这两个值,您可以使用2个捕获组,并使用重复模式和负前瞻来检查某行是否不以Default of Database(数据库的默认值)开头,直到该行开始为止。
\[([^]]+)\](?:\r?\n(?!Default|Database).*)*\r?\n(?:Default|Database)=(\S+)
关于图案
\[
匹配[
(
捕获组1
[^]]+
匹配1次以上而不是]
)
关闭第1组\]
匹配]
(?:
非捕获组
\r?\n
匹配换行符(?!
负向查找,断言直接在右边的不是
Default|Database
匹配选项之一).*
结束负向查找,并匹配除换行符0次以上以外的所有字符)*
关闭非捕获组并重复0次以上\r?\n(?:Default|Database)=
匹配换行符,任意选项和=
(\S+)
捕获第2组,将非空白字符匹配1次以上(或使用(.+)
匹配1次以上字符)