Как получить все подстроки определенного формата из строки - PullRequest
3 голосов
/ 01 апреля 2019

У меня есть большая строка, и я хочу получить из нее все подстроки формата [[someword]].
Смысл, получить все слова (список), которые заключены в открывающие и закрывающие квадратные скобки.

Теперь один из способов сделать это - разбить строку на пробел, а затем отфильтровать список с помощью этого фильтра, но проблема в том, что иногда [[someword]] не существует как слово, оно может иметь ,, пробел или . прямо перед после него.

Каков наилучший способ сделать это?

Я буду признателен за решение в Scala, но поскольку это больше проблема программирования, я переведу ваше решение в Scala, если оно будет на каком-то другом языке, который я знаю, например. Python.

Этот вопрос отличается от помеченного как дубликат, поскольку регулярное выражение должно содержать символы, отличные от английских, в скобках.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Решение Scala:

val text = "[[someword1]] test [[someword2]] test 1231"

val pattern = "\\[\\[(\\p{L}+)]\\]".r //match words with brackets and get content with group
val values = pattern
   .findAllIn(text)
   .matchData
   .map(_.group(1)) //get 1st group
   .toList

println(values)
2 голосов
/ 01 апреля 2019

Вы можете использовать это (?<=\[{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());
}

Prints,

someword
some other word

Дайте мне знать, если это то, что вы искали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...