IT序号网

RegEx 先行但不紧随其后

qq78292959 2024年05月22日 编程语言 208 0

我正在尝试匹配荷兰语 ge-berg-te 等字词。 berg 本身是一个名词,而 ge...te 是一个环缀,即 geberg 不存在,bergte 也不存在。 gebergte 可以。我想要的是匹配 berggebergte 的 RegEx,并使用 lookaround。我在想这会起作用

\b(?i)(ge(?=te))?berg(te)?\b 

但事实并非如此。我猜是因为前瞻只检查紧随其后的字符,而不是跨字符。有没有什么方法可以先行匹配字符,而不必限制这些字符必须紧跟在其他字符之后?

有效匹配为:

  • 伯格
  • 伯格
  • 格贝格
  • 变态

无效匹配项可能是:

  • 格贝格
  • 格贝格
  • 贝格特
  • 贝格

ge-/Ge- 和 -te 总是同时出现。请注意,我想先行尝试一下。我知道它可以做得更简单,但我想看看这样做在方法论上是否可行。

请您参考如下方法:

这是一个基于非环视的正则表达式:

\b(berg|gebergte)\b 

将它与 i(忽略大小写)标志一起使用。此正则表达式使用交替和单词边界来搜索完整单词 berggebergte

RegEx Demo

基于环视的正则表达式:

(?<=\bge)berg(?=te\b)|\bberg\b 

此正则表达式使用前瞻和后视来搜索 berg,前面是 ge,后面是 te。或者,它使用单词边界断言器 \b 匹配完整的单词 berg ,它也是 0 宽度断言器,如 anchor ^$.


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!