Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby正则表达式,除了括号和括号中的内容以外的所有内容_Ruby_Regex - Fatal编程技术网

ruby正则表达式,除了括号和括号中的内容以外的所有内容

ruby正则表达式,除了括号和括号中的内容以外的所有内容,ruby,regex,Ruby,Regex,我正在尝试编写一个正则表达式,它以不在括号或括号中的字符串生成内容。括号总是一年,括号可以包含任何普通字符,大写和小写。我通过找到括号和圆括号,然后[^\regex]来转义它(这是对的吗?) 下面是字符串: s = 'Some words (1999) [THINGS] 而正则表达式: /[^(\(\d{4}\))|\[.*\]]/ 但这包括括号内的字符,请参见(http://rubular.com/r/bbpcnnGgCI) 在添加[^\regex]之前,一切正常 例如,这可以获得(199

我正在尝试编写一个正则表达式,它以不在括号或括号中的字符串生成内容。括号总是一年,括号可以包含任何普通字符,大写和小写。我通过找到括号和圆括号,然后[^\regex]来转义它(这是对的吗?)

下面是字符串:

s = 'Some words (1999) [THINGS]
而正则表达式:

/[^(\(\d{4}\))|\[.*\]]/
但这包括括号内的字符,请参见(http://rubular.com/r/bbpcnnGgCI)

在添加[^\regex]之前,一切正常

例如,这可以获得(1999年):

括号内的内容:

>> puts s.match(/\[.*\]/)
[THINGS]
但是用| for“or”将它们放在一起:

…它只匹配括号及其内容

这是怎么回事


我做错了什么?

从相反的方向看这个问题如何:尝试将模式
\(\d{4}\)
替换为空白
,然后您将得到您想要的:

s.gsub("\(\d{4}\)", "")

已编辑:要合并@rick(thx@rick!)建议的语法更正

从相反的方向看这个问题如何:尝试将模式
\(\d{4}\)
替换为空白的
,然后您将得到您想要的:

s.gsub("\(\d{4}\)", "")
编辑:要合并@rick(thx@rick!)建议的语法更正

试试这个
/\(.+/
,它将匹配开头的所有内容
以后)。如果你去掉它,你会得到
“一些单词”
,这应该是你需要的

两点

  • 我可能误解了这个问题
  • 如果字符串前面可能出现
    ),则需要更复杂的内容
  • 顺便说一句,我发现在尝试使用正则表达式模式时非常有价值

    编辑此模式应仅匹配括号中的内容,即使字符串前面有一个不正确的括号

    string.gsub(/(\(|\[).+(\)|\])/, '')
    
    试试这个
    /\(.+/
    ,它将匹配开头
    之后的所有内容。如果你去掉它,你就剩下
    “一些单词”
    ,这应该是你需要的

    两点

  • 我可能误解了这个问题
  • 如果字符串前面可能出现
    ),则需要更复杂的内容
  • 顺便说一句,我发现在尝试使用正则表达式模式时非常有价值

    编辑此模式应仅匹配括号中的内容,即使字符串前面有一个不正确的括号

    string.gsub(/(\(|\[).+(\)|\])/, '')
    

    如果您需要与字符串中的多组括号相匹配的内容,并将其与单词混合在一起,这将起作用


    如果您需要与字符串中的多组括号相匹配的内容,并将其与单词混合在一起,这将起作用

    (\(\d{4}\)\[.*\]
    表示“括号中的四位数字,也包含在一个组中;或方括号之间的任何数字”

    [^…]
    并不意味着“任何与
    ..
    不匹配的内容”。
    []
    设置一个字符集,如果它以
    ^
    开头,则该字符集将被否定。
    [^(\(\d{4}\)\124;\[.*]
    表示“不是开括号、开括号、数字、开大括号、4、闭大括号、闭括号、管道、开方括号、句点、星形或闭方括号的字符”

    您希望匹配“不在括号或括号内的任何文本”。这不容易直接用正则表达式表示。您真正想要做的是使用“任何括号或括号内的项”作为分隔符拆分字符串

    我不知道ruby语法,但在Python中它看起来像:

    import re
    
    pattern = re.compile(r"(?:\[[^\]]*\])|(?:\(\d{4}*\))")
    
    pattern.split('Some words (1999) [THINGS]') # ['Some words ', ' ', '']
    
    假设您需要,这将为您提供单独的片段。如果您只是想再次将它们连接起来,那么“用空字符串替换分隔符”(即
    gsub
    )方法可以很好地工作。

    (\(\d{4}\)\124;\[.\]
    意味着括号中的四位数字,也包含在一组中;或方括号中的任何数字”

    [^…]
    并不意味着“任何与
    ..
    不匹配的内容”。
    []
    设置一个字符集,如果它以
    ^
    开头,则该字符集将被否定。
    [^(\(\d{4}\)\124;\[.*]
    表示”不是开括号、开括号、数字、开括号、4、闭括号、闭括号、管道、开方括号、句点、星形或闭方括号的字符”

    您希望匹配“不在括号或括号内的任何文本”。这不容易直接用正则表达式表示。您真正想要做的是使用“任何括号或括号内的项”作为分隔符拆分字符串

    我不知道ruby语法,但在Python中它看起来像:

    import re
    
    pattern = re.compile(r"(?:\[[^\]]*\])|(?:\(\d{4}*\))")
    
    pattern.split('Some words (1999) [THINGS]') # ['Some words ', ' ', '']
    

    假设您需要,这将为您提供各个片段。如果您只是想再次将它们连接起来,那么“将分隔符替换为空字符串”(即
    gsub
    )方法很好。

    像这样?除了实际的括号和括号,我似乎什么都给了我,我也不想要它们的内容。哦,我明白你的意思。使用gsub我得到了相同的结果,没有任何改变,但我知道你要用这个…>>s.gsub((\d{4}),“)=>”艺术家名称(1999)[FLAC]“@rick:请注意,括号是转义的,即(\d{4})-而不是(\d{4}),因为在您的评论中,在SO上发布评论需要额外级别的反斜杠转义;)像这样?这似乎给了我一切,但实际的括号和括号,我也不想要它们的内容。哦,我明白你在说什么。使用gsub我得到了相同的结果,没有任何改变,但我知道你要用这个…>>s.gsub((\d{4})”,“)=>“艺术家名称(1999)[FLAC]”@里克:注意,括号是转义的(