2013-11-27 106 views
-1

我目前正在进行一项练习,其中需要找到所有正在发生的(),[],{},分组或单个练习,并且我无法弄清楚正则表达式。我不需要中间的文字。我已经用这个过滤了我的字符串:括号和正则表达式

string_updated = string.gsub(/([a-zA-Z]|\d+)|\s+/, "") 

例如,在此字符串中:

"I can't (find the } regular ] expression to) grab these[." 

我想要的全部是:(, }, ],), [

+3

这个问题不清楚... –

+3

'[()\ [\] {}] +'是你所需要的。 – sln

回答

0

你应该能够做到这一点与([\(\[\{]).*([\)\]\}])

这里是一个工作示例:http://regex101.com/r/qH1uF5

+0

不与'我不能(找到正则表达式))抓住这些[。我想要的是:(,},],),[.' –

+3

为了避免噪音,内部类只有'['需要逃脱。 – sln

0

你应该使用下面的正则表达式:

([][)(}{])

说明:

(   # Start capturing group 
    [   # Match any of these characters 
    ][)(}{ # Desired chars 
    ]   # End of char group 
)   # End of capturing group 

Live demo

+0

它的一个技巧,'''可以在类中作为第一个字符使用,但是,即使在扩展模式下,类也被排除在外,现在它已经有两个类。 – sln

+0

也许Ruby是不同的。我不知道。无论如何,这是压缩'[#匹配任何这些字符\ n] [)(} {#期望的字符\ n]'现在是两个类。 – sln

+0

@sln我不知道它在新版本中的红宝石。正则表达式在1.8.7v版本中效果很好:http://rubular.com/r/mzNF4GVtbw – revo

0

关于什么:

a = "I can't (find the } regular ] expression to) grab these[." 
brackets = %w|() [ ] { }| 
puts a.scan(Regexp.union(brackets)).join(', ') #=> (, }, ],), [