Ruby 寻找匹配所有单词(括号内的单词除外)的正则表达式

Ruby 寻找匹配所有单词(括号内的单词除外)的正则表达式,ruby,regex,Ruby,Regex,我试图编写一个正则表达式,匹配特定字符串中的所有单词,但跳过括号中的单词。我目前有一个与所有单词匹配的正则表达式: /[a-z0-9]+(-[a-z0-9]+)*/i 我还有一个正则表达式,它匹配括号内的所有单词: /\[(.*)\]/i 我基本上想要匹配第一个正则表达式匹配的所有内容,但是没有第二个正则表达式匹配的所有内容 输入文本示例: 它应该分别匹配每个单词,括号中没有一个 感谢您的帮助。谢谢 也许你可以分两步来做: 删除括号内的所有文本 使用正则表达式匹配其余单词 用一个正则表达式来

我试图编写一个正则表达式,匹配特定字符串中的所有单词,但跳过括号中的单词。我目前有一个与所有单词匹配的正则表达式:

/[a-z0-9]+(-[a-z0-9]+)*/i
我还有一个正则表达式,它匹配括号内的所有单词:

/\[(.*)\]/i
我基本上想要匹配第一个正则表达式匹配的所有内容,但是没有第二个正则表达式匹配的所有内容

输入文本示例: 它应该分别匹配每个单词,括号中没有一个


感谢您的帮助。谢谢

也许你可以分两步来做:

  • 删除括号内的所有文本
  • 使用正则表达式匹配其余单词

  • 用一个正则表达式来完成这两件事,结果会比它需要的复杂得多。

    我认为我没有正确理解这个问题。为什么不创建一个不包含第二个正则表达式的新字符串,如下所示:

    string1 =~ s/\[(.*)\]//g
    

    在我看来,这与您在string1中存储结果时删除的内容不匹配吗?我还没有测试过这个。我可能稍后再测试。

    我同意Shhnap。如果没有更多的信息,听起来最简单的方法就是删除你不想要的东西。但它必须是/[(.*?)]/而不是。之后,您可以在\s上拆分

    如果您试图遍历每个单词,并且希望每个单词都匹配,那么您可以使用:string.split(/\W+/)进行一些欺骗。您将丢失引号以及其他内容,但您得到了每个单词。

    这是怎么回事:

    your_text.scan(/\[.*\]|([a-z0-9]+(?:-[a-z0-9]+)*)/i) - [[nil]]
    

    您使用的是哪个Ruby版本?如果是1.9或更高版本,这应该满足您的要求:

    /(?<![\[a-z0-9-])[a-z0-9]+(-[a-z0-9]+)*(?![\]a-z0-9-])/i
    
    /(?这似乎有效:

    [^\[][a-z0-9]+(-[a-z0-9]+)*
    
    如果一个单词的第一个字母是一个开始的括号,那么它与它不匹配


    顺便说一句,你为什么要捕捉带破折号的单词?如果不需要,你的正则表达式可以简化。

    So
    fine young lady from[Venice][1],
    从,
    变成了
    优秀的年轻女士?是的,这正是我要做的。嘿,格伦,你的意思是,然后看看第一组?这是一个很酷的简单技巧,出于某种原因,似乎很少有人在使用它。+1!:)我只是在一次实验中使用了它,并在研究是否有人在使用该技巧时找到了你的答案。