2015-11-02 76 views
1

我試圖在我的resx文件中找出亂七八糟的佔位符。查找字符串中的字符序列

對於例如,我試圖找出下面的示例在第3和第5行:

Déplacer樂卷宗當地«{0}»VERS«{1}»
Déplacer樂contenu serveur«{ 0}»VERS«{1}»
Déplacer勒contenu本地«{0}»VERS«{1 \»
DémarrerLA同步
{Démarrer的LOR德拉Connexion公司0}
Démarrer{0}的LOR德拉connexion

更新:添加需要匹配弄亂了佔位符的多個例子:

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

نقلمحتوىمحلي 「{0}」 إلى 「{1}」

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

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

我想出了下面的正則表達式,但什麼是錯的:

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

從本質上講,我試圖做的是匹配的字符串包含「{」或「}」,但不包含{0 -9}。

請大家幫忙。

+0

閱讀您的目標說明我沒有看到第三行如何匹配 –

+0

第三行包含「{0}」。這與您的描述不符 – Jonesopolis

+0

嘗試使用'{(?![0-9]})[^ {}] *}?'。 –

回答

0

看來你只需要匹配任何支撐 - 開放和關閉 - 如果它不是之前(或之後)的支撐對手和1位數的整數。

您可以使用下面的正則表達式:

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

它將匹配2層的替代品:

  • {(?![0-9]}) - 這是不能用1位數字後跟一個{} 或...
  • (?<!{[0-9])} - a }不是由{後跟一個1位數字

前面參看regex demo

在C#,就足夠了處於Regex.IsMatch(line, regex)呼叫以使用該正則表達式。

-1

這將匹配不包含{0-9}但至少包含一個{}所有行:

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

但是,你說你想匹配根據您的病情線3和5。第3行包含{0},因此它不匹配。

然而,由於使用的是C#,我會做更多的處理在C#中比在正則表達式(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}