繁体   English   中英

正则表达式选择不包含某些字符的文本

[英]Regex select text excluding certain characters

我有这样的文字

MyText.xyz;
MyText.abc + "ss";

我想捕获MyText.之后的文本MyText. ,但不以结尾; 或空白区域,即我希望输出如下:

MyText.xyz
MyText.abc

我创建了此正则表达式: MyText.(.*(?=\\;)) ,以实现我的目标。

但是,现在正则表达式匹配的文本是MyText.xyzMyText.abc + "ss" ,即第二个结果不正确。

您可以使用否定的字符类来修复它:

MyText\.[^\s;]+
        ^^^^^^^ 

正则表达式演示

正则表达式详细信息

  • MyText\\. -文字MyText. 子(注意.一定要逃到一个字面匹配. CHAR)
  • [^\\s;]+ -否定的字符类,与除空格( \\s )和;之外的任何1+个字符匹配; 烧焦

用作var pattern = @"MyText\\.[^\\s;]+"; 在C#中。

MyText\..+?\b(?<!;)
   ^  ^ ^  ^  ^
   |__|_|__|__|______ MyText : "MyText" literal
      |_|__|__|______ \.     : "." literal, escaped by "\"
        |__|__|______ .      : any character
           |__|______ ?\b    : non-greedy search up to boundary (\b)
              |______ (?<!;) : not ended by ';'

测试:

$ cat sample.txt
MyText.xyz;
MyText.abc + "ss";
MyText.uuu+"yyy";

$ grep -Po 'MyText\..+?\b(?<!;)' <sample.txt
MyText.xyz
MyText.abc
MyText.uuu

注意:它基于@WiktorStribiżew的解决方案,并增加了后面的功能

您正在使用

MyText.(.*(?=\;))

第一个错误是. MyText之后,应该是\\. 如果要匹配文字点。

后半部分也不正确,您尝试匹配任意数量的非换行符,后跟一个; ,这就是您获得结果的原因。

尝试使用此正则表达式:

MyText.[^ ;]*

[^ ;]*匹配非空格或;任何字符; 如果您也不希望制表符或换行符匹配,则可以改用以下内容:

MyText.[^\s;]*

\\s匹配任何空格字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM