我有以下字符串{[ab]} {[c] } { [d] } {[f]} { = [abc] qwqw = =qwwq= =wq }
,我试图通过使用一个括号内的特定字符串来提取一个组,例如:
ab->
d->{[d]}
abc->
一旦得到结果,我想用其他东西替换它。
我尝试了几种不同的正则表达式模式:
{(.*?[(?:abc)].*?)}
([^}][{].*?[(?:abc)].*?[}])
({+?(?<=)[(?:abc)].*?[}])
^(?:.*)({.*?[(?:abc)].*?[}])
但它们都不能正常工作。它们要么与太多的字符串匹配,要么与太少的字符串匹配。
此部分(?:abc)
将匹配字符串abc
,不需要非捕获组。这将不匹配单一的a或ab等
一种选择是使用一个捕获组和一个字符类,重复一次或多次列出的[abcd]+
,如果可以的话,也可能是aaa
{[^{}]*[([abcd]+)][^{}]*}
部件内
{
匹配{
[^{}]*
匹配0+次而不是{
或}
[
匹配[
([abcd]+)
捕获组1,匹配1次以上列出的任何一次]
匹配]
[^{}]*
匹配0+次而不是{
或}
}
匹配}
查看Regex演示
如果你只想匹配abc ab c或d,你也可以使用交替匹配ab和可选的c或c或d
{[^{}]*[(abc?|c|d)][^{}]*}
Regex演示