java去除特定单词_如何否定正则表达式中的特定单词?

本文探讨了在正则表达式中如何实现特定单词的否定匹配,提供了多种实用的正则表达式示例,包括使用负前瞻、负回顾等高级技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我知道我可以像[^bar]一样否定一组字符,但是我需要一个正则表达式,其中否定适用于特定单词-因此在我的示例中,如何否定实际的bar而不是“ bar中的任何字符”?

#1楼

^(?!.*?bar).*

^(.(?

或仅使用基础知识:

^(?:[^b]+|b(?:$|[^a]|a(?:$|[^r])))*$

这些都匹配不包含bar任何东西。

#2楼

除非性能是最重要的问题,否则通常只需要通过第二遍就可以轻松完成结果,而跳过那些与您要否定的单词相匹配的结果通常会更容易。

正则表达式通常意味着您无论如何都在执行脚本或某种低性能的任务,因此请找到易于阅读,易于理解和易于维护的解决方案。

#3楼

下面的正则表达式将满足您的要求(只要支持否定的lookbehinds和lookaheads),即可正确匹配事物; 唯一的问题是,它与单个字符匹配(即,每个匹配都是单个字符,而不是两个连续的“小节”之间的所有字符),如果您使用的字符串很长,则可能会产生高开销。

b(?!ar)|(?

#4楼

一个很好的方法是使用负前瞻 :

^(?!.*bar).*$

否定的超前构造是一对圆括号,其中圆括号开头是问号和感叹号。 在先行内[是任何正则表达式模式]。

#5楼

只是想到可以做的其他事情。 它与我的第一个答案有很大不同,因为它不使用正则表达式,所以我决定发表第二个答案。

在字符串上使用您所选择的语言的split()方法等效,并带有单词否定作为拆分内容的参数。 使用Python的示例:

>>> text = 'barbarasdbarbar 1234egb ar bar32 sdfbaraadf'

>>> text.split('bar')

['', '', 'asd', '', ' 1234egb ar ', '32 sdf', 'aadf']

至少在Python中这样做的好处是(至少我不记得该功能在Visual Basic或Java中是否相同),它可以在重复输入“ bar”时间接告诉您该字符串是由于结果列表中包含“ bar”之间的空字符串(尽管开头的空字符串是由于字符串的开头存在“ bar”的事实)。 如果您不希望这样做,则只需从列表中删除空字符串即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值