从XML提取connectionString多字段值的正则方案及解析
没问题,我给你写一个能适配格式变化的正则表达式,还会一步步拆解逻辑,保证你能看懂:
解决方案:提取ConnectionString字段的正则表达式
先直接上可以用的正则:
user id\s*=\s*(?<userid>[^;]+);\s*password\s*=\s*(?<password>[^;]+);\s*Data Source\s*=\s*(?<datasource>[^;]+);\s*Database\s*=\s*(?<database>[^;"]+)
正则逻辑拆解
我把每个部分拆开来解释,你就能明白它为啥能适配格式不一致的情况:
user id\s*=\s*:匹配"user id"关键字,\s*用来匹配0个或任意多个空格,不管字段名和等号之间有没有空格、有多少空格(比如user id=、user id =都能匹配)(?<userid>[^;]+):这是个命名捕获组,名字叫userid。[^;]+表示匹配除了分号;之外的所有字符,直到遇到下一个分号为止,精准提取完整的user id值,不会多拿也不会少拿;\s*password\s*=\s*:匹配分隔用的分号,然后用同样的\s*逻辑处理password字段的空格问题(?<password>[^;]+):和userid的捕获组逻辑一样,提取password的值;\s*Data Source\s*=\s*:处理"Data Source"字段,同样用\s*适配字段名、等号前后的空格变化(?<datasource>[^;]+):提取Data Source的值;\s*Database\s*=\s*:处理Database字段的空格(?<database>[^;"]+):这里用[^;"]+是因为connectionString的结尾是双引号",所以要匹配到双引号前的内容,避免把引号也包含进去
使用示例(Python)
给你写个实际能用的代码例子,直接就能跑:
import re # 你的XML行内容 xml_content = '<add name="core" connectionString="user id=value1;password=value2;Data Source=datasource1.comapany.com;Database=databasename_compny" />' # 正则表达式 extract_pattern = r'user id\s*=\s*(?<userid>[^;]+);\s*password\s*=\s*(?<password>[^;]+);\s*Data Source\s*=\s*(?<datasource>[^;]+);\s*Database\s*=\s*(?<database>[^;"]+)' # 执行匹配 match_result = re.search(extract_pattern, xml_content) if match_result: # 按你要的格式拼接结果 output = f"(username={match_result.group('userid')},password={match_result.group('password')}, DataSource={match_result.group('datasource')},Database={match_result.group('database')})" print(output)
运行后会输出你想要的格式:
(username=value1,password=value2, DataSource=datasource1.comapany.com,Database=databasename_compny)
内容的提问来源于stack exchange,提问作者Naren
相关产品推荐
相关产品推荐

