我如何 select 在 c# 中全部包含敏感大小写 (regex)?
How do I select all including sensitive case (regex) in c#?
我的正则表达式命令有问题,
我有一个包含很多行和很多敏感字符的文件,
this is an Example with all sensitive case 0123456789/*-+.&é"'(-è_çà)=~#{[|`\^@]}²$*ù^%µ£¨¤,;:!?./§<>AZERTYUIOPMLKJHGFDSQWXCVBNazertyuiopmlkjhgfdsqwxcvbn
我尝试了很多正则表达式命令,但从未得到预期的结果,
我必须 select 从 示例到结尾
的所有内容
我在 https://www.regextester.com/ 上试过这个命令:
\sExample(.*?)+
Image of the result here
当我在 C# 中尝试时,我得到的唯一结果是:Example
我不明白为什么 --'
这里简单聊一下贪心和悲观:
这里是测试数据:
Example word followed by another word and then more
这里有两个正则表达式:
Example.*word
Example.*?word
首先是贪心。正则表达式将匹配 Example
然后它会使用 .*
消耗所有的东西一直到字符串的 END 并且一次向后吐出一个字符,试图使匹配成功。当 Example word followed by another word
匹配时它将成功, .* 匹配 word followed by another
(以及两端的 spaces)
第二种是悲观;它一次一个字符地沿着字符串向前蚕食,试图匹配。正则表达式将匹配 Example
然后它会在 .*?
通配符中再输入一个字符,然后检查它是否找到 word
- 它找到了。所以悲观匹配只会找到单个 space 而悲观模式下的全匹配是 Example word
因为你说你想要 Example 之后的整个字符串,所以我建议使用贪婪量词,这样它会立即获取剩余的整个字符串并声明匹配,而不是一次一个地向前蚕食(慢)
然后,这将匹配(并捕获)示例之后的所有内容:
\sExample(.*)
方括号组成一个捕获组。在 c# 中,我们可以在方括号的开头使用 ?<namehere>
来命名组,然后可以使用以下方式检索所有与 .* 匹配的内容:
Regex r = new Regex("\sExample(?<x>.*)");
Match m = r.Match("Exampleblahblah");
Console.WriteLine(m.Groups["x"].Value); //prints: blahblah
请注意,如果您的数据包含换行符,您应该注意 .不匹配换行符,除非您在创建正则表达式时启用 RegexOptions.SingleLine
我的正则表达式命令有问题,
我有一个包含很多行和很多敏感字符的文件,
this is an Example with all sensitive case 0123456789/*-+.&é"'(-è_çà)=~#{[|`\^@]}²$*ù^%µ£¨¤,;:!?./§<>AZERTYUIOPMLKJHGFDSQWXCVBNazertyuiopmlkjhgfdsqwxcvbn
我尝试了很多正则表达式命令,但从未得到预期的结果, 我必须 select 从 示例到结尾
的所有内容我在 https://www.regextester.com/ 上试过这个命令:
\sExample(.*?)+
Image of the result here
当我在 C# 中尝试时,我得到的唯一结果是:Example
我不明白为什么 --'
这里简单聊一下贪心和悲观:
这里是测试数据:
Example word followed by another word and then more
这里有两个正则表达式:
Example.*word
Example.*?word
首先是贪心。正则表达式将匹配 Example
然后它会使用 .*
消耗所有的东西一直到字符串的 END 并且一次向后吐出一个字符,试图使匹配成功。当 Example word followed by another word
匹配时它将成功, .* 匹配 word followed by another
(以及两端的 spaces)
第二种是悲观;它一次一个字符地沿着字符串向前蚕食,试图匹配。正则表达式将匹配 Example
然后它会在 .*?
通配符中再输入一个字符,然后检查它是否找到 word
- 它找到了。所以悲观匹配只会找到单个 space 而悲观模式下的全匹配是 Example word
因为你说你想要 Example 之后的整个字符串,所以我建议使用贪婪量词,这样它会立即获取剩余的整个字符串并声明匹配,而不是一次一个地向前蚕食(慢)
然后,这将匹配(并捕获)示例之后的所有内容:
\sExample(.*)
方括号组成一个捕获组。在 c# 中,我们可以在方括号的开头使用 ?<namehere>
来命名组,然后可以使用以下方式检索所有与 .* 匹配的内容:
Regex r = new Regex("\sExample(?<x>.*)");
Match m = r.Match("Exampleblahblah");
Console.WriteLine(m.Groups["x"].Value); //prints: blahblah
请注意,如果您的数据包含换行符,您应该注意 .不匹配换行符,除非您在创建正则表达式时启用 RegexOptions.SingleLine