请教一个正则表达式的写法

2019-03-24 22:48:13 +08:00
 dsg001
哈哈哈哈哈哈哈哈哈哈哈。哈哈哈哈哈哈哈哈哈哈哈。哈哈哈:“哈哈哈哈哈哈哈哈。”哈哈哈哈哈哈哈哈哈哈哈。哈哈哈哈哈哈哈哈哈哈哈。

想用句号进行分割,如何才不匹配引号内的句号?

1599 次点击
所在节点    问与答
7 条回复
billwsy
2019-03-24 22:55:31 +08:00
记得如果是任意多层嵌套的引号的话正则式是做不到的,3 类文法的限制,加条件限制吧?
richard1122
2019-03-24 23:18:42 +08:00
c# 的正则支持平衡组,看起来应该可以满足需求
DiamondbacK
2019-03-25 00:00:16 +08:00
$ str='f1。f2。f3:“ f4。f5。” f6。f7。“ f8。f9。”'
$ echo $str | sed -r ':a;s/^([^\n]*)(“[^\n]*”)/\1\n\2\n/;t a;' | sed '/^“.*”$/!s/。/\n/g'
f1
f2
f3:
“ f4。f5。”
f6
f7

“ f8。f9。”

由于 sed 不支持懒惰匹配,所以第一步是从右边开始分割出引号字符串,并假定引号内没有换行符。
Alexinder
2019-03-25 04:07:49 +08:00
cfg 或者加个 Stack?
dsg001
2019-03-25 08:46:41 +08:00
@DiamondbacK 感谢指点,昨晚折腾了好长时间没搞定
DiamondbacK
2019-03-25 09:12:34 +08:00
@dsg001 不过这个方法不能解决嵌套引号的情况。
dsg001
2019-03-25 10:05:27 +08:00
@DiamondbacK 暂时还没嵌套的问题,正则这玩意儿总得碰到问题才能长进啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/548092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX