这是我的正则表达式。我在Ruby中,如果我没弄错的话 - 使用POSIX正则表达式。
regex = /(?:\n^)(\*[\w+ ?]+\*)\n/
这是我的目标:我想分割一个带有*delimited by asterisks*
正则表达式的字符串,包括那些星号。 然而:我只想在匹配前面添加一个换行符(\n
),或者它是整个字符串的开头。这是我正在使用的字符串。
"*Friday*\nDo not *break here*\n*But break here*\nBut again, not this"
我的正则表达式在*Friday*
匹配时没有正确分割,但 在*But break here*
匹配时分割(它还会引发here
分割)。我的问题出现在第一组的某个地方,我认为:(?:\n^)
- 我知道这是错的,而且我不完全确定编写它的正确方法。有人可以解释一下吗?这是我的完整代码。
regex = /(?:\n^)(\*[\w+ ?]+\*)\n/
str = "*Friday*\nDo not *break here*\n*But break here*\nBut again, not this"
str.split(regex)
结果如下:
>>> ["*Friday*\nDo not *break here*", "*But break here*", "But again, not this"]
我希望它是这样的:
>>> ["*Friday*", "Do not *break here*", "*But break here*", "But again, not this"]
编辑#1 :我已更新了我的正则表达式和结果。 (2011/10/18 16:26 CST)
编辑#2 :我再次更新了。 (CST 16:32)
答案 0 :(得分:2)
如果您只是在每个字符串的前面添加'\ n',该怎么办?这简化了处理过程:
regex = /(?:\n)(\*[\w+ ?]+\*)\n/
str = "*Friday*\nDo not *break here*\n*But break here*\nBut again, not this"
res = ("\n"+str).split(regex)
res.shift if res[0] == ""
res
=> [ "*Friday*", "Do not *break here*",
"*But break here*", "But again, not this"]
我们必须注意最初的额外比赛,但这并不算太糟糕。我怀疑有人可以缩短这一点。
答案 1 :(得分:0)
第1组&以下正则表达式中的2个:
(?:\A|\\n)(\*.*?\*)|(?:\A|\\n)(.*?)(?=\\n|\Z)
将为您提供所需的输出。我不是红宝石专家所以你必须自己创建列表:)
答案 2 :(得分:0)
为什么不分开换行?从你的例子来看,它看起来就像你真正想做的那样。
str.split("\n")