regex - 如何从字符串中获取特定格式的所有子字符串
问题描述
我有一个大字符串,我想从中获取所有格式的子字符串[[someword]]
。
意思是,获取包含在左方括号和右方括号中的所有单词(列表)。
现在执行此操作的一种方法是按空格拆分字符串,然后使用此过滤器过滤列表,但问题是有时[[someword]]
不作为单词存在,它可能有一个,
, 空格或.
在它之前或之后。
做这个的最好方式是什么?
我会欣赏 Scala 中的解决方案,但由于这更像是一个编程问题,如果它是我知道的其他语言,例如 Python,我会将您的解决方案转换为 Scala。
这个问题与标记重复的问题不同,因为正则表达式需要能够在括号之间容纳除英文字符之外的字符。
解决方案
您可以使用此(?<=\[{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
让我知道这是否是您想要的。
推荐阅读
- r - bind_rows(), column can't be converted from integer to character error
- java - Java List sort and group using Stream
- java - When paintComponent() is invoked during a repaint process
- go - File does not reside within any path specified using proto_path
- google-cloud-platform - Cloud SQL proxy cannot connect to a database using a second service account with same permissions
- hbase - Upsert in Apache Phoenix EXTREMELY slow how to improve write performance?
- c# - UWP 空白 GridView,每列之间带有标题和行
- python - Unpacking a numpy ndarray of tuples and add it in a new dimension
- javascript - Javascript IF-Else not working as expected
- asp.net - C# ASP.NET Core 2 中的安全网络聊天