【问题标题】:Advance a regex forward one character将正则表达式向前推进一个字符
【发布时间】:2018-12-01 09:06:30
【问题描述】:

我正在查找句点和分号之间的表达式 - 此表达式本身不能包含句点或分号。

到目前为止,这是我的正则表达式。

(?!\..*?\..*?;)\..*?;

正则表达式基本上说“在句点和分号之间查找字符串。但是,在确定候选句点后,如果在到达分号之前它最终后面跟着另一个句点,那么我想取消它的资格。”

这是我想要的,除了我不想在匹配中包含初始句点(也不是终端分号)。我试图与一个非捕获组(?!\..*?\..*?;)(?:\.).*?; 一起前进,但我得到了相同的结果。如何在匹配中省略句点(和分号)?我正在使用 Sublime 3 搜索正则表达式。

【问题讨论】:

  • \.([^.]+);我认为这可以解决您的问题
  • @CodeManiac 他不希望表达式实际匹配句点或分号 - 请参阅 this expression cannot itself contain periods or semicolons.
  • (?

标签: regex negative-lookahead capturing-group


【解决方案1】:

听起来您可能想改用否定字符集,这将允许您匹配任何字符您放入集中的字符(不包括句点和分号)。然后,使用lookahead 检查非句点字符是否后跟 分号,实际上没有匹配分号,并使用lookbehind 确保该模式紧跟在前面句号:

所以,模式

(?<=\.)[^.;]+(?=;)

将匹配非句点、非分号字符,这些字符在句点之后并后跟分号。

https://regex101.com/r/E8XsDB/2

【讨论】:

  • 我错过了 ;在我的正则表达式中,你是完美的
  • 我的比较差,不仅仅是因为它包含句号和分号,还因为在下面的例子中,它只会匹配后一种情况,而不是两者:a. a; a. a;
  • 这个正则表达式可以包含换行符,而我的从不包含换行符有什么原因吗?
  • @efthimio 模式中的. 不匹配换行符——它将匹配除换行符之外的任何字符。另一方面,负字符集将匹配绝对任何不在字符集中的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
相关资源
最近更新 更多