正则表达式查找相同类型字符之间的特定字符

时间:2019-07-03 20:17:17

标签: c# regex wpf

我希望在¨¨组之间更改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¨组之间。

很抱歉,如果以前已经解决了这个问题,但是我一直在寻找和搜索,无法完善编码的正确方法。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您的代码断言左边是¨,然后是0+而不是¨,并且匹配逗号。之后,断言右边是¨

这对于以上所有逗号都是有效的,其中¨在左侧和右侧。

但是对于示例数据,您可以做的是匹配¨之后的数字

(?<=¨[0-9][^¨]*),(?=[^¨]*\¨)
     ^^^^^  

.NET regex demo | C# demo

enter image description here

如果它不仅适用于数字,则可以使用:

(?<=¨[^¨]+),(?=[^¨]*[^¨]\¨)

.NET Regex demo

如果它不仅适用于数字,则可以使用:

(?<=¨[^¨,][^¨]*),(?=[^¨]*[^¨,]¨)

说明

  • (?<=向后看,断言左边是
    • [^¨,]不匹配,¨
    • ¨[^¨]*匹配¨,然后匹配1次以上而不是¨
  • )往后看积极
  • ,字面上匹配
  • (?=正向前进,断言右边是
    • [^¨]*¨匹配1次以上而不是¨,然后匹配¨
    • [^¨,]不匹配,¨
  • )积极回望

.NET Regex demo | C# demo

enter image description here

答案 1 :(得分:0)

您可以使用以下Regex进行匹配:

  1. 标准双引号:

    Regex regex = new Regex(@"\"(.+?)\"", RegexOptions.Compiled);
    
  2. 特殊双引号:

    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);

result将同时具有¨5,3,6¨¨3,4¨enter image description here

如果要替换,只需使用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(",","»"));