首页 > 解决方案 > 如何从字符串中获取特定格式的所有子字符串

问题描述

我有一个大字符串,我想从中获取所有格式的子字符串[[someword]]
意思是,获取包含在左方括号和右方括号中的所有单词(列表)。

现在执行此操作的一种方法是按空格拆分字符串,然后使用此过滤器过滤列表,但问题是有时[[someword]]不作为单词存在,它可能有一个,, 空格或.在它之前或之后。

做这个的最好方式是什么?

我会欣赏 Scala 中的解决方案,但由于这更像是一个编程问题,如果它是我知道的其他语言,例如 Python,我会将您的解决方案转换为 Scala。

这个问题与标记重复的问题不同,因为正则表达式需要能够在括号之间容纳除英文字符之外的字符。

标签: regexstringscala

解决方案


您可以使用此(?<=\[{2})[^[\]]+(?=\]{2})正则表达式来匹配和提取包含在双方括号中的所有您需要的单词。

这是一个Python解决方案,

import re

s = 'some text [[someword]] some [[some other word]]other text '
print(re.findall(r'(?<=\[{2})[^[\]]+(?=\]{2})', s))

印刷,

['someword', 'some other word']

我从未在 Scala 工作过,但这里有一个 Java 解决方案,而且我知道 Scala 仅基于 Java,因此这可能会有所帮助。

String s = "some text [[someword]] some [[some other word]]other text ";
Pattern p = Pattern.compile("(?<=\\[{2})[^\\[\\]]+(?=\\]{2})");
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group());
}

印刷,

someword
some other word

让我知道这是否是您想要的。


推荐阅读