regex - Dart - 使用正则表达式拆分字符串并保留分隔符
问题描述
我有以下字符串:
final String text = """
This is first text <link="www.stackoverflow.com">First Hello</link>
This is the second text <link="www.stackoverflow.com">Second</link>
"""
我想拆分字符串并得到以下结果:
[
"This is first text ",
"<link="www.stackoverflow.com">First Hello</link>",
"This is the second text ",
"<link="www.stackoverflow.com">Second</link>"
]
我尝试使用这个正则表达式,但它不像预期的那样:
(?<=<link=".*">)|(?=</link>)
这是结果:
我可以使用正则表达式这样拆分吗?正则表达式格式如何?
谢谢你。
解决方案
你很近。尝试:
var re = RegExp(r'(?=<link=".*?">)|(?<=</link>)');
它与您的 RegExp 有两个不同之处:
- 它交换
(?=
and因为你想要在 a之前进行(?<=
拆分,所以你想要向前看,在 a 之后,所以向后看。<link...>
</link>
- 我添加了
?
to".*?"
,因为否则它可能会匹配到"
同一行的稍后,而不是第一个。你的例子没有,但比抱歉更安全。
有了它,你得到了字符串:
"This is first text "
"<link=\"www.stackoverflow.com\">First Hello</link>"
"\nThis is the second text "
"<link=\"www.stackoverflow.com\">Second</link>"
"\n"
如果您不希望包含换行符,您可能应该先删除它们。
如果您想将 与 结合起来\n
,</link>
您可以将 RegExp 更改为
var re = RegExp(r'(?=<link=".*?">)|(?<=</link>\n*(?<=\n))');
这给了你:
"This is first text "
"<link=\"www.stackoverflow.com\">First Hello</link>\n"
"This is the second text "
"<link=\"www.stackoverflow.com\">Second</link>\n"
推荐阅读
- sql - 不同行的多重条件
- javascript - 如何在 react-js 中一次选择所有图像?
- python - 遍历字符串后如何从字符串的开头重新迭代?
- excel - 如何检查特定时间是否在Excel中的2次之间?
- linkedin - LinkedIn API 能否返回用户已保存文章的列表?
- laravel - 我们如何计算数据库中的 foreach 循环字段?
- php - php 无法正确读取 json
- cloudera - CDH与HDP哪个分布
- automation - 我可以编写一个人工智能来读取屏幕上的内容,然后在计算机上执行一些简单的任务吗
- flutter - 在 Flutter 中防止 ScrollablePositionedList 弹跳