在字符串中查找字符序列
本文关键字:字符 查找 字符串 | 更新日期: 2023-09-27 18:20:13
我正在尝试识别resx文件中混乱的占位符。
例如,我正在尝试识别以下样本中的第3行和第5行:
Déplacer le档案本地«{0}»版本«{1}»
«{0}»与«{1}»之间的内容服务提供商
Déplacer le contentu local«{0}»vers«{1''»
Démarrer la同步
{连接0的Démarrer lors}
连接的Démarrer{0}lors
更新:添加更多需要匹配的混乱占位符示例:
ملفّات
نقلمح;{0}";إلى"{1} ";
إعادبديالمحي;{0}";ك"{1} ";
إعادبديالمحي;{0}";ك"{1} ";
我想出了下面的正则表达式,但有些地方出了问题:
/^(?=.*['{'}9])(?!'{[0-9]'}).*$
本质上,我试图做的是匹配包含"的字符串;{〃或"}";,但不包含{0-9}。
请帮忙。
似乎只需要匹配任何大括号-左大括号和右大括号-如果它不在大括号对应项和1位数整数之前(或之后)。
您可以使用以下正则表达式:
{(?![0-9]})|(?<!{[0-9])}
它将匹配2个备选方案:
{(?![0-9]})
-后面没有1位数的{
和}
或者(?<!{[0-9])}
-前面没有紧跟1位数的{
的}
查看regex演示
在C#中,只要在Regex.IsMatch(line, regex)
调用中使用这个正则表达式就足够了。
这将匹配所有不包含{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}
。