鉴于此文:
fluid * capable of flowing freely like water
* having or showing a smooth and easy style
liquid * shining and clear * clear, smooth, and pleasant in sound
我需要能够分别捕捉这些部分
capable of flowing freely like water
having or showing a smooth and easy style
shining and clear
clear, smooth, and pleasant in sound
使用此正则表达式:/\*(.*)/
导致:
capable of flowing freely like water
having or showing a smooth and easy style
shining and clear * clear, smooth, and pleasant in sound
是否可以在不引入结束标记的情况下完成此任务?
答案 0 :(得分:0)
你可以通过写
来做到这一点str.gsub(/\n\n.*?\s/,'').gsub("\n",'').split('*').drop(1)
它给出了这个
[" capable of flowing freely like water", " having or showing a smooth and easy style", " shining and clear ", " clear, smooth, and pleasant in sound"]
从每行的开头和结尾删除空格
str.gsub(/\n\n.*?\s/,'').gsub("\n",'').split('*').drop(1).map(&:lstrip)
答案 1 :(得分:0)
您的正则表达式 - \*(.*)
- 匹配文字星号,然后匹配除换行符之外的0个或更多字符(尽可能多)。在大多数情况下,.*
匹配行的其余部分,有或没有其他星号。
所有您需要的是scan
\*([^*\n]*)
正则表达式(其中否定字符类[^*\n]
将匹配限制为下一个星号或换行符):
s.scan(/\*([^*\n]*)/)
请参阅IDEONE demo
请注意,如果在正则表达式中定义了捕获组,scan
将仅返回捕获的文本。我们将其定义为([^*\n])
,它匹配任何字符,但换行符和星号。 \*
匹配文字星号,*
量词告诉正则表达式引擎匹配前面的子模式0次或更多次。