【问题标题】:Regex expression that selects only specific word仅选择特定单词的正则表达式
【发布时间】:2016-07-22 04:28:26
【问题描述】:

欢迎大家,我是这个社区的新手!

就是这样,我有一些这样的字符串

这就是苹果啊

那是个苹果啊糟糕

thatisanappleaaa.bad

这是一个苹果badaaa

那是一个糟糕的苹果aaa

那是个坏蛋

badthatisanappleaaa

并尝试使用Sublime Text 3的查找和替换功能来实现以下(注意只有第一行被替换)

那是橙色的aaa

那是个苹果啊糟糕

thatisanappleaaa.bad

这是一个苹果badaaa

那是一个糟糕的苹果aaa

那是个坏蛋

badthatisanappleaaaa

是否有一个正则表达式可以过滤“thatisanappleaaa”(这是第一行)中的“apple”,而字符串中的任何位置(“apple”之间除外)都不存在“bad”,因为字符串“bad” " 每次出现都不改变?

【问题讨论】:

  • 我不确定 Sublime Text 是否可以做到这一点……看来 Sublime Text 不支持可变长度的负向lookbehinds,所以你不能这样做(?<!bad.*)apple(?!.*bad)。跨度>
  • 我得出了和@smarx 一样的结论。
  • 感谢大家的帮助,@smarx 的正则表达式在多个测试站点中表现出色。猜猜我必须在其他文本编辑器中找到我的好苹果

标签: regex sublimetext3


【解决方案1】:

试试

(\w+)苹果(\w+).*

将选择苹果周围的所有文本

如果你想在苹果使用后选择文本尾随

苹果(\w+).*

【讨论】:

  • 感谢您的回复!它选择了所有的行,但场景只选择字符串“apple”而没有“bad”
【解决方案2】:

阅读您的描述后,我假设您只想在没有出现任何单词 bad 的句子中替换单词 apple

我使用了一个正则表达式,它使用负前瞻并使用括号来捕获apple,然后可以将其替换为任何单词,在您的情况下为orange

正则表达式:^(?!.*bad).*(apple)

DEMO

【讨论】:

  • 感谢您的回复!建议的正则表达式能够选择“第一行”,但我只需要选择字符串“apple”。
  • @m.x9082 如果您注意到我在“匹配信息”部分中提供的演示一侧,只有 apple 与括号匹配。您可以根据您使用的语言将匹配的括号替换为您选择的任何单词。
  • 谢谢!现在我注意到您的正则表达式在网络中有效,但是当我将它插入 Sublime Text 3 时,它会从字符串的开头选择到“apple”(即“thatisanapple”)的结尾,当我用橙色替换它时,整行字符串变成“orangeaaa”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多