c# - 正则表达式在找到文本 Y 时选择文本 X

标签 c# regex

描述

如果在该行中找到特定文本,我需要一个正则表达式来匹配 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/

相关文章:

c# - 具有多个 dbcontext 的一个事务

c# - 获取通用的自定义属性

c# - Entity Framework 回滚并删除错误的迁移

javascript - 在 Javascript 中将字符串转换为帕斯卡大小写(又名 UpperCamelCase)

正则表达式提取括号之间的值

javascript - 如何修改我的下面的正则表达式?

javascript - 使用 .net 发布大文件后出现 404

c# - 我在哪里可以获得有关 .NET 对象模型的内存布局信息的信息?

JavaScript Regex 将长日期时间转换为短日期并将长数字转换为小数点后两位

java - 使用 JTextField 从用户获取正则表达式。如何让它显示为选项卡而不是后跟 t