【问题标题】:Regular Expression negative lookahead for Vowels元音的正则表达式负前瞻
【发布时间】:2023-03-18 10:37:01
【问题描述】:

我想要一个 Java 正则表达式字符串,它可以在字符串中找到所有元音,除非它们:

  1. 是第一个字符或
  2. 下划线后的下一个字符

AREA_ID 变为
AR_ID

LONG_NAME 变为
LNG_NM

HOME_ALONE 变成
HM_ALN

我玩过http://gskinner.com/RegExr 和 我目前有以下正则表达式替换所有元音,除非它是起始字符​​p>

(?!^[AEIOU])[AEIOU]

我不知道如何得到第二部分(忽略紧跟在下划线后面的元音)。

【问题讨论】:

  • 您可能想要使用单词边界 (\b)。
  • 您需要指明您使用的语言或工具,因为不同的正则表达式引擎是不同的。大多数支持前瞻(您正在使用)的引擎也支持后瞻(您需要),但(例如)JavaScript 不支持。
  • 顺便说一句,吹毛求疵:正则表达式不会“删除”任何东西或“替换”任何东西;它只是匹配。在许多语言中都可以找到基于正则表达式的替换功能,但正则表达式本身并没有真正进行替换!
  • 我根据你的 cmets 更新了帖子

标签: java regex


【解决方案1】:

我猜你正在使用 JavaScript,在这种情况下可以这样做:

(?!(?:^|_))_?[AEIOU]

但是,如果您使用的正则表达式支持lookbehinds,试试这个:

(?<!^)(?<!_)[AEIOU]

请注意,需要两个lookbehind,因为lookbehind必须具有固定长度,而“字符串的开头或下划线”则没有。

【讨论】:

  • 谢谢。我使用了错误的环视。在这种情况下,我想要的是向后看,而不是向前看。
猜你喜欢
  • 2021-10-11
  • 2011-10-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多