我正在寻找匹配的正则表达式:
ciao: c'iao 'ciao'
使用:
ciao #every word excluding non-word character
c'iao #including apostrophes
ciao #excluding the quotes ''
到目前为止,我已经能够将前两个要求与:
相匹配/[\w']+/
但我正在努力在单引号之间提取单词(不包括引号)。请注意,我不会在引号之间包含带撇号的单词(例如'c'iao')
我见过许多类似的Q& A,但找不到任何适合我的需求;答案的额外分数包括一个简短的解释:)
答案 0 :(得分:3)
您可以使用以下表达式:
/\w+(?:'\w+)*/
请参阅Rubular demo
表达式匹配:
\w+
- 一个或多个单词字符(?:'\w+)*
- 零个或多个序列(因为(?:...)*
是一个非捕获组,它将用*
量词匹配的0个或更多个匹配量化的子模式序列分组):
'
- 撇号\w+
- 一个或多个单词字符。"ciao: c'iao 'ciao'".scan(/\w+(?:'\w+)*/)
# => [ciao, c'iao, ciao]
答案 1 :(得分:0)
考虑到单词可以以撇号开头或结尾,或者包含多个撇号,我建议首先拆分空格,然后删除包含单词的单引号对。
str = "'Twas because Bo didn't like Bess' or y'all's 'attitude'"
str.split.map { |s| s =~ /\A'.+'\z/ ? s[1..-2] : s }
#=> ["'Twas", "because", "Bo", "didn't", "like", "Bess'", "or", "y'all's", "attitude"]
第一步产生
arr = str.split
#=> ["'Twas", "because", "Bo", "didn't", "like", "Bess'", "or", "y'all's", "'attitude'"]
正则表达式匹配arr
以单引号开头和结尾的元素。