查找字符串中的字符序列

时间:2015-11-02 21:37:43

标签: c# regex regex-negation

我正在尝试在我的resx文件中识别混乱的占位符。

例如,我正在尝试识别以下样本中的第3行和第5行:

  

Déplacerledossier local«{0}»vers«{1}»
  Déplacerlecontenu serveur«{0}»vers«{1}»
  Déplacerlecontenu当地«{0}»vers«{1 \»
  Démarrerla同步
  {Démarrerlorsde la connexion 0}
  Démarrer{0} lors de la connexion

更新:添加需要匹配的混乱占位符的更多示例:

  

ملفاتمحملة{0}

     

نقلمحتوىمحلي“{0}”إلى“{1}”

     

إعادةتسميةالمحتوىالمحلي“{0}”ك“{1}”

     

إعادةتسميةالمحتوىالمحلي“{0}”ك“{1}”

我提出了以下正则表达式,但出了点问题:

/^(?=.*[\{\}9])(?!\{[0-9]\}).*$

基本上,我要做的是匹配包含“{”或“}”的字符串,但不包含{0-9}。

请帮忙。

2 个答案:

答案 0 :(得分:0)

看起来你只需要匹配任何支撑 - 开启和关闭支撑 - 如果它不是在支撑对应物之前(或之后)和1位整数。

您可以使用以下正则表达式:

{(?![0-9]})|(?<!{[0-9])}

它将匹配2个替代方案:

  • {(?![0-9]}) - { 未被跟踪一位数字和一个} 或...
  • (?<!{[0-9])} - } 前面 <{1}}后跟一位数字

请参阅regex demo

在C#中,只需在{调用中使用此正则表达式。

答案 1 :(得分:-1)

这将匹配所有不包含{0-9}但包含至少一个{}的行:

^((?!{\d}).)+?((?=[{}]).)+?$

但是,您说要根据条件匹配第3行和第5行。第3行包含{0},因此无法匹配。

但是,由于您使用的是C#,我会在C#中进行比在Regex中更多的处理(strings.txt包含您的第一个法语输入):

var strings = File.ReadAllLines("strings.txt");

var r1 = new Regex("{[0-9]}");
var r2 = new Regex("[{}]");

var filtered = strings.Where(s => !r1.IsMatch(s)).Where(s => r2.IsMatch(s));

Console.WriteLine("\tinput:");
foreach (var s in strings) Console.WriteLine(s);

Console.WriteLine("\n\tresult:");
foreach (var s in filtered) Console.WriteLine(s);

Console.ReadLine();

但是,对于您的第二个阿拉伯语输入,这并不匹配任何内容,因为它们实际上都包含{0-9}