我希望在¨¨
组之间更改all,而不会更改¨¨
之间的其他所有内容。
我想我快到了,但是它抓住了所有¨¨
之间(没有对它们进行分组)
Regex yourRegex2 = new Regex(@"(?<=\¨[^¨]*),(?=[^¨]*\¨)", RegexOptions.Compiled);
string allData = yourRegex2.Replace(allData1, "»");
上面在此示例2,¨5,3,6¨,1,2,1,¨3,4¨,1,2
上使用的代码捕获了¨5,3,6¨,1,2,1,¨3,4¨
中的所有逗号,而不仅仅是在¨5,3,6¨
和¨3,4¨
组之间。
很抱歉,如果以前已经解决了这个问题,但是我一直在寻找和搜索,无法完善编码的正确方法。任何帮助将不胜感激。
答案 0 :(得分:1)
您的代码断言左边是¨
,然后是0+而不是¨
,并且匹配逗号。之后,断言右边是¨
。
这对于以上所有逗号都是有效的,其中¨
在左侧和右侧。
但是对于示例数据,您可以做的是匹配¨
之后的数字
(?<=¨[0-9][^¨]*),(?=[^¨]*\¨)
^^^^^
如果它不仅适用于数字,则可以使用:
(?<=¨[^¨]+),(?=[^¨]*[^¨]\¨)
如果它不仅适用于数字,则可以使用:
(?<=¨[^¨,][^¨]*),(?=[^¨]*[^¨,]¨)
说明
(?<=
向后看,断言左边是
[^¨,]
不匹配,
或¨
¨[^¨]*
匹配¨
,然后匹配1次以上而不是¨
)
往后看积极,
字面上匹配(?=
正向前进,断言右边是
[^¨]*¨
匹配1次以上而不是¨
,然后匹配¨
[^¨,]
不匹配,
或¨
)
积极回望答案 1 :(得分:0)
您可以使用以下Regex
进行匹配:
标准双引号:
Regex regex = new Regex(@"\"(.+?)\"", RegexOptions.Compiled);
特殊双引号:
Regex regex = new Regex(@"¨(.+?)¨", RegexOptions.Compiled);
它在目标字符串之间匹配一个或多个字符。
然后,使用Regex.Matches
来匹配所有此类情况:
var data = "2,¨5,3,6¨,1,2,1,¨3,4¨,1,2";
var result = regex.Matches(data);
如果要替换,只需使用Regex.Replace()
,它将替换所有此类情况。
var final = regex.Replace(data, "»");
final
变量的内容:
2,»,1,2,1,»,1,2
答案 2 :(得分:0)
假设您要使用常规双引号而不是特殊引号(否则为什么不正确的\
会转义?),请使用Regex.Replace
的lambda版本:
Regex yourRegex2 = new Regex(@"""[^""]*""", RegexOptions.Compiled);
string allData = yourRegex2.Replace(allData1, m => m.Value.Replace(",","»"));