在字符串中查找字符序列

本文关键字:字符 查找 字符串 | 更新日期: 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}