描述
如果在该行中找到特定文本,我需要一个正则表达式来匹配 xml 文件的键/值条目的“值”中的所有内容。
问题
对于示例测试字符串:
<add key="myDatabase" value="Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
我需要匹配所有值:
Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;
IF 且仅当该行包含“mydb”
我的正则表达式尝试
-
(?<=(Server=)|(Data Source=))[^;]*
-
.*(D|d)atabase=(M|m)(Y|y)(D|d)(B|b).*
额外的测试字符串
<add key="myDatabase" value="Data Source=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
<add key="myDatabase" value="User Id=xxxxxx;Password=xxxxxx;Data Source=abc-lsatdm094\devbox1;Database=mydb;" />
<add key="myDatabase-DatabaseConnectionString" value="Server=abc-lsatdm094\devbox1;Database=myDB;User Id=xxxxxx;Password=xxxxxx;" />
<add key="myDatabase-DatabaseConnectionString" value="Data Source=$LocalInstance; database=myDb; Trusted_Connection=True;" />
<add key="myDatabase-databaseConnectionString" value="database=mydb; Trusted_Connection=True;Data Source=$LocalInstance;" />
最佳答案
我实际上找到了一个解决方案,因为我正要发布:
(?<=value=").*(M|m)(Y|y)(D|d)(B|b).*;
分割
(?<=value=")
这部分是“向后看”。所以文本必须包含value="
这是“匹配的”但不包含在捕获组中。
.*
这表示匹配所有(暂时)
(M|m)(Y|y)(D|d)(B|b)
这表示匹配mydb
(大写和小写)
.*;
并继续捕获直到 ;
的最后一个实例
关于c# - 正则表达式在找到文本 Y 时选择文本 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416721/