为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式以跳过捕获组中的字符

正则表达式以跳过捕获组中的字符

暮色呼如 2019-11-02 14:22:39
是否可以跳过捕获组中正则表达式中的几个字符?我正在使用.NET正则表达式,但这无关紧要。基本上,我正在寻找的是:[随机文本] AB-123 [随机文本]并且我需要不带连字符的情况下捕获“ AB123”。我知道AB是2或3个大写字符,而123是2或3个数字,但这不是很难的部分。困难的部分(至少对我而言)是跳过连字符。我想我可以分别捕获它们,然后在代码中将它们连接起来,但是我希望我有一个更优雅的,仅用于正则表达式的解决方案。有什么建议么?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

简而言之:你不能。匹配始终是连续的,即使它包含零宽度的断言,如果要转到下一个字符,也就无法匹配下一个字符。


查看完整回答
反对 回复 2019-11-02
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您的断言,如果没有分组再加上它,就不可能做到这一点是正确的。


您也可以像Jeff-Hillman一样,只在事发之后剔除坏角色。


这里要注意的重要一点是,您“不要对所有内容都使用正则表达式”。


正则表达式是为不太复杂的问题而设计的,用于不太复杂的解决方案,您不应该对所有内容都使用“哦,我们将使用正则表达式”,并且您不应习惯于认为自己可以通过简单的方法解决问题。一步式正则表达式。


当存在可行的可行方法时,请务必使用它。


如果您恰巧需要在代码体中返回多个匹配项,则可以使用另一种想法,即寻找基于语言“回调”的正则表达式,该表达式允许将任何匹配/找到的组传递给可以进行内联替换的函数调用。(在执行regexp时特别方便)。


不知道它如何在.Net中工作,但是在php中您会做类似的事情(不是精确的代码)


  function strip_reverse( $a )

  {

     $a = preg_replace("/-/", "", $a );

     return reverse($a);

  }

  $b = preg_replace_callback( "/(AB[-]?cde)/" , 'strip_reverse' , "Hello World AB-cde" ; 


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 1057 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信