有一条按规则建的线。“City [synonym1, .., synonymN] {link}, City2 [] {}]” 方括号和/或大括号中可能没有文本。例子
String input = "Москва [Мск, Белокаменная] {msk.com}, Санкт-Петербург [Спб, Питер], Ростов, Калининград [Кёниг] {123.com}";
需要一个正则表达式来分成几部分
- 莫斯科 [Msk, Belokamennaya] {msk.com}
- 圣彼得堡 [圣彼得堡、圣彼得堡]
- 罗斯托夫
- 加里宁格勒 [Koenig] {123.com}
然后你需要将每一行划分为城市、同义词和链接
- 莫斯科
- [莫斯科时间,别洛卡门纳亚]
- {msk.com}
据我了解,这里需要输入表格前面文本的条件"?<=\\{*\\})||(?<=[*]), ?"
告诉我如何撰写?
您可以使用
查看表达式如何工作的示例。细节:
(?U)
-Pattern.UNICODE_CHARACTER_CLASS
- 包括 Unicode 支持\w
(\w+(?:-\w+)*)
- 子模式 #1:一个或多个字母数字字符,后跟 0 个或多个字符重复-
和一个或多个字母数字字符(?:\s*\[([^\]\[]*)])?
- 0 个或多个空白字符的可选序列,然后[
是 0 个或多个除]
and以外的字符[
(子模式 #2),然后]
(?:,?\s*\{([^{}]*)\})?
- 一个可选的逗号序列,0 个或多个空格字符,然后{
是 0 个或多个除}
and以外的字符{
(子模式 #3),然后是}
.Java代码:
结果:
对于问题的第二部分,
.split(" ")
当您按空格分隔每个部分时,该函数适合此处。对于第一个任务,用逗号分隔文本是不够的,因为逗号既可以是部分的分隔符,也可以在 和 之间的枚举块
{
}
中[
]
。第一部分的解决方案可能如下所示: