Regex 无法捕获两个引号中的一个

Regex 无法捕获两个引号中的一个,regex,powershell,ini,Regex,Powershell,Ini,因此,我正在努力解析ini文件。它在很大程度上是有效的,但我遇到了一个具体的问题,我对regex了解不够,无法解决 代码示例: 我遇到了这样的情况:我的ini文件可能有带引号的值,然后有带引号的字符串: Key=" this value="something here"" 我想要一个单一的正则表达式字符串(最好是在开关捕获中),以避免出现双引号 我尝试在值的两侧使用可选字符“?,但它只跳过了起始引号,而没有跳过结束引号 编辑 示例字符串: KeyN

因此,我正在努力解析
ini
文件。它在很大程度上是有效的,但我遇到了一个具体的问题,我对
regex
了解不够,无法解决


代码示例: 我遇到了这样的情况:我的
ini
文件可能有带引号的值,然后有带引号的字符串:

Key="  this value="something here""
我想要一个单一的正则表达式字符串(最好是在开关捕获中),以避免出现双引号

我尝试在值的两侧使用可选字符
“?
,但它只跳过了起始引号,而没有跳过结束引号


编辑 示例字符串:

KeyName = "value:"ac-dii-sk""
尝试的模式:

$HashPattern = '\s*(?<Key>.+)\s*=\s*"?\s*(?<Value>.*)\s*"?\s*'
预期结果:

$Matches['Key']   = KeyName
$Matches['Value'] = value:"ac-dii-sk"
让我们试一下

(?。+?)\s*=\s*(?)(?*)(?*?)$
输入:
KeyName=“value:“ac dii sk”“

捕获值:
值:“ac dii sk”

输入:
KeyName=“value:“ac dii sk”
(少1个结束引号)
值:
值:“ac dii sk

输入:
KeyName=value:“ac dii sk”“
(缺少起始引号)
值:
值:“ac dii sk”“

输入:
KeyName=value:“ac dii sk”
(无引号)
值:
值:“ac dii sk”


正如我在评论中提到的,我建议您只使用现有库来解析INI文件。以下是PSGallery中的2个:


@BenH Nope,该项目仍然与帖子相同。您可能希望查看或查找更专业的/lightweight。但如果您仍然想推出自己的,请发布您尝试的使用
“?
的模式,并详细说明键/值。你提供的那个似乎无效,不是吗?在这个例子中,键应该在哪里结束?值从何处开始?引用应该像引用一样工作还是被忽略?@briantist所以我的目标是不捕获起始/结束引用(如果它们存在的话)。我将用我正在尝试的更新我的帖子。好的,这会更好一些,但是现在你的示例模式与你的示例字符串不匹配。也不完全清楚这个字符串的哪个部分是vaue,哪个部分指定值;所以除了显示不成功的结果,你能告诉我们你想要的结果是什么吗?总之,显示:一个实际的输入字符串,一个实际应用的模式,你现在得到了什么,你想要什么。@briantist Done。我不知道这是否可行,但我只想在它们都存在的情况下替换周围的引号?这正是我的目标。我不知道这个功能,谢谢!你知道为什么没有终点线它就不能工作吗
$
@TheIncorrigible1因为我必须使
值中的
*
组与
*?
非贪婪,否则,点将消耗所有引号,如果我没有将
close open
组锚定到末尾,非贪婪的
组将捕获尽可能少的内容以满足整个匹配,在这种情况下,这将是无效的,因为
关闭打开
组是可选的。
$HashPattern = '\s*(?<Key>.+)\s*=\s*"?\s*(?<Value>.*)\s*"?\s*'
$Matches['Key']   = KeyName
$Matches['Value'] = value:"ac-dii-sk""
$Matches['Key']   = KeyName
$Matches['Value'] = value:"ac-dii-sk"