识别并替换括号中的非 ASCII 字符
Identify and replace non-ASCII characters between brackets
我有以下结构的标签(只有括号内的 ASCII 字符):[Root.GetSomething]
,相反,一些贡献者最终提交了看起来类似于拉丁字符的西里尔字符的贡献,例如[Rооt.GеtSоmеthіng]
。
我需要定位,然后用方括号内匹配的 ASCII 字符替换那些不一致的地方。
我试过了\[([АаІіВСсЕеРТтОоКкХхМ]+)\]
; (\[)([^\x00-\x7F]+)(\])
,以及范围的一些变体,但这些搜索没有看到任何匹配项。我似乎在正则表达式执行逻辑中遗漏了一些重要的东西。
您可以使用正则表达式匹配 [
+ 字母或 .
+ ]
和条件替换模式之间的任何“有趣的”西里尔字符:
查找内容:(?:\G(?!\A)|\[)[a-zA-Z.]*\K(?:(А)|(а)|(І)|(і)|(В)|(С)|(с)|(Е)|(е)|(Р)|(Т)|(т)|(О)|(о)|(К)|(к)|(Х)|(х)|(М))(?=[[:alpha:].]*])
替换为:(?1A:?2a:?3I:?4i:?5B:?6C:?7c:?8E:?9e:?{10}P:?{11}T:?{12}t:?{13}O:?{14}o:?{15}K:?{16}k:?{17}X:?{18}x:?{19}M)
确保 Match Case
选项已开启。看到一个 regex demo with a 字符串:
详情:
(?:\G(?!\A)|\[)
- 上一次成功匹配的结尾或 [
char
[a-zA-Z.]*
- 零个或多个 .
或 ASCII 字母
\K
- 匹配重置运算符,从整体匹配内存缓冲区中丢弃当前匹配的文本
(?:(А)|(а)|(І)|(і)|(В)|(С)|(с)|(Е)|(е)|(Р)|(Т)|(т)|(О)|(о)|(К)|(к)|(Х)|(х)|(М))
- 一个包含 19 个备选方案的非捕获组,每个备选方案都被放入一个单独的捕获组中
(?=[[:alpha:].]*])
- 需要零个或多个字母或 .
的正面前瞻,然后是紧靠当前位置右侧的 ]
字符。
如果第 1 组匹配,(?1A:?2a:?3I:?4i:?5B:?6C:?7c:?8E:?9e:?{10}P:?{11}T:?{12}t:?{13}O:?{14}o:?{15}K:?{16}k:?{17}X:?{18}x:?{19}M)
替换模式将 А
替换为 A
(\u0410
),将 а
(\u0430
) 替换为a
如果第 2 组匹配,等等
我有以下结构的标签(只有括号内的 ASCII 字符):[Root.GetSomething]
,相反,一些贡献者最终提交了看起来类似于拉丁字符的西里尔字符的贡献,例如[Rооt.GеtSоmеthіng]
。
我需要定位,然后用方括号内匹配的 ASCII 字符替换那些不一致的地方。
我试过了\[([АаІіВСсЕеРТтОоКкХхМ]+)\]
; (\[)([^\x00-\x7F]+)(\])
,以及范围的一些变体,但这些搜索没有看到任何匹配项。我似乎在正则表达式执行逻辑中遗漏了一些重要的东西。
您可以使用正则表达式匹配 [
+ 字母或 .
+ ]
和条件替换模式之间的任何“有趣的”西里尔字符:
查找内容:(?:\G(?!\A)|\[)[a-zA-Z.]*\K(?:(А)|(а)|(І)|(і)|(В)|(С)|(с)|(Е)|(е)|(Р)|(Т)|(т)|(О)|(о)|(К)|(к)|(Х)|(х)|(М))(?=[[:alpha:].]*])
替换为:(?1A:?2a:?3I:?4i:?5B:?6C:?7c:?8E:?9e:?{10}P:?{11}T:?{12}t:?{13}O:?{14}o:?{15}K:?{16}k:?{17}X:?{18}x:?{19}M)
确保 Match Case
选项已开启。看到一个 regex demo with a
详情:
(?:\G(?!\A)|\[)
- 上一次成功匹配的结尾或[
char[a-zA-Z.]*
- 零个或多个.
或 ASCII 字母\K
- 匹配重置运算符,从整体匹配内存缓冲区中丢弃当前匹配的文本(?:(А)|(а)|(І)|(і)|(В)|(С)|(с)|(Е)|(е)|(Р)|(Т)|(т)|(О)|(о)|(К)|(к)|(Х)|(х)|(М))
- 一个包含 19 个备选方案的非捕获组,每个备选方案都被放入一个单独的捕获组中(?=[[:alpha:].]*])
- 需要零个或多个字母或.
的正面前瞻,然后是紧靠当前位置右侧的]
字符。
如果第 1 组匹配,(?1A:?2a:?3I:?4i:?5B:?6C:?7c:?8E:?9e:?{10}P:?{11}T:?{12}t:?{13}O:?{14}o:?{15}K:?{16}k:?{17}X:?{18}x:?{19}M)
替换模式将 А
替换为 A
(\u0410
),将 а
(\u0430
) 替换为a
如果第 2 组匹配,等等