如何支持将这个正则表达式从JAVA转换为C#?
我用java制作了一个应用程序,现在需要将它转换成C#(UWP)。我需要转换以下正则表达式,但C#不支持所有格限定符,因此“+”部分会使正则表达式对象崩溃。(其余的看起来很好) 正则表达式:如何支持将这个正则表达式从JAVA转换为C#?,java,c#,regex,Java,C#,Regex,我用java制作了一个应用程序,现在需要将它转换成C#(UWP)。我需要转换以下正则表达式,但C#不支持所有格限定符,因此“+”部分会使正则表达式对象崩溃。(其余的看起来很好) 正则表达式:( 表达式是根据用户输入动态构建的 Parts: - {0}: exclude prefix - {1}: include prefix - {2}: include prefix - {3}: include expression (is the word to find) - {4}: in
(
表达式是根据用户输入动态构建的
Parts:
- {0}: exclude prefix
- {1}: include prefix
- {2}: include prefix
- {3}: include expression (is the word to find)
- {4}: include suffix
- {5}: exclude suffix
具体例子:(
如果您有建议,表达式可以更改,但需要给出相同的结果
注意:我尝试了PCRE.NET Nuget
,但它似乎创建了另一个带有lookback表达式的问题(lookback断言在偏移量0处不是固定长度)
那么…有人能帮我吗?您可以使用原子组:
(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)
输出:
-maison=>“maison”
-petite maison=>“petite maison”
-maison Blue=>“maison Blue”
-petite maison bleue=>“petite maison bleue”
-la maison=>“”
-maison ciel=>“”
-拉佩蒂·梅森=>“”
-maison bleue ciel=>“”
-拉佩蒂·梅森·布勒=>“”
-娇小的maison bleue ciel=>“”
-la maison Blue ciel=>“”
-拉佩蒂·梅森·希尔=>“”
-la maison ciel=>“”
-拉佩蒂·梅森·布卢埃·希尔=>“”
您可以尝试使用原子组或抑制回溯的原子组。例如,C语言中的(?>\\w+)(\\d\\d)(\\w+)
与Java语言中的(\\w++)(\\d\\d)(\\w+)(\\w+)
类似。@SGKoishi谢谢,它似乎起作用了:-)
Should match:
- maison
- petite maison
- maison bleue
- petite maison bleue
Should not match:
- la maison
- maison ciel
- la petite maison
- maison bleue ciel
- la petite maison bleue
- petite maison bleue ciel
- la maison bleue ciel
- la petite maison ciel
- la maison ciel
- la petite maison bleue ciel
(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)
var rx = @"(?<!\bla\s+(?:petite\s+)?)(?:petite\s+)?(?>maison(?:e?s|x)?\b(?:\s+bleu[sxe]?)?)(?!\s+ciel)";
var strings = new List<String> {" - maison"," - petite maison"," - maison bleue",
" - petite maison bleue"," - la maison"," - maison ciel"," - la petite maison",
" - maison bleue ciel"," - la petite maison bleue"," - petite maison bleue ciel",
" - la maison bleue ciel"," - la petite maison ciel"," - la maison ciel"," - la petite maison bleue ciel"};
foreach (var s in strings)
{
Console.WriteLine("{0} => \"{1}\"", s, Regex.Match(s, rx)?.Value);
}