我正在努力从字符串中提取报头和2或3位ISO 639代码。
有效字符串的一般格式为:
header + <special char> + <2 or 3 digit code> + (<special char>forced)
最后一节<special character>forced
是可选的,可能存在,也可能不存在,但如果存在,则forced
必须在前面加上特殊字符(如.
、_
或-
),才能被视为有效字符串。
要提取的标题和语言代码(eng
)的有效字符串示例如下:
name.eng
name-eng
name(eng)
name(fri)_eng
name(fri)(eng)
name.eng.forced
name(eng).forced
name.(eng).forced
name.fri.eng.forced
name(fri).eng.forced
name.(fri).eng_forced
name-fri-eng.forced
name_(fri)_eng.forced
name(fri)_eng.forced
name(friday)_eng_forced
name(fri)(eng).forced
这里要检查的是,如果语言代码后面有一个)
,那么它之前一定有一个(
。这并不重要,但如果正则表达式可以检查它就更好了。
无效字符串的示例如下:
nameeng
nameeng.forced
name.eng).forced
name(fri)eng.forced
name(friday).engforced
name(fri)(eng)forced
我想要检查的是:
(.*)([._\-(])([a-z][a-z][a-z]|[a-z][a-z])((?<=\(...)\))?(.forced)?
我还试图让非关键回看在语言代码之前检查(
,如果它在代码之后有)
的话。这也不是关键问题,但也不是我面临的核心问题。
问题是,对于一些有效的名称,头文件(以及相应的语言代码)是不正确的,因为我认为表达式太贪婪了(我使用的是C#,没有办法关闭所有操作数的贪婪)。我尝试了从右到左的选项,但在重新排列表达式后似乎也不起作用。
在C#中,是否可以通过正则表达式实现我所需要的功能?
https://stackoverflow.com/questions/52880315
复制相似问题