我正在尝试在我的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}。
请帮忙。
答案 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}
。