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