Как извлечь подстроку с помощью регулярного выражения

У меня есть строка, в которой есть две одинарные кавычки, символ «. Между одинарными кавычками находятся данные, которые я хочу.

Как написать регулярное выражение для извлечения «данных, которые я хочу» из следующего текста?

 mydata = "some string with 'the data i want' inside"; 

    Предполагая, что вам нужна часть между одинарными кавычками, используйте это регулярное выражение с помощью Matcher :

     "'(.*?)'" 

    Пример:

     String mydata = "some string with 'the data i want' inside"; Pattern pattern = Pattern.compile("'(.*?)'"); Matcher matcher = pattern.matcher(mydata); if (matcher.find()) { System.out.println(matcher.group(1)); } 

    Результат:

     данные, которые я хочу
    

    Для этого вам не нужно регулярное выражение.

    Добавьте apache commons в свой проект ( http://commons.apache.org/proper/commons-lang/ ), а затем используйте:

     String dataYouWant = StringUtils.substringBetween(mydata, "'"); 
     import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { Pattern pattern = Pattern.compile(".*'([^']*)'.*"); String mydata = "some string with 'the data i want' inside"; Matcher matcher = pattern.matcher(mydata); if(matcher.matches()) { System.out.println(matcher.group(1)); } } } 

    Поскольку вы также отметили Scala, решение без регулярного выражения, которое легко справляется с несколькими цитируемыми строками:

     val text = "some string with 'the data i want' inside 'and even more data'" text.split("'").zipWithIndex.filter(_._2 % 2 != 0).map(_._1) res: Array[java.lang.String] = Array(the data i want, and even more data) 

    Для этого есть простой однострочный:

     String target = myData.replaceAll("[^']*(?:'(.*?)')?.*", "$1"); 

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

    Смотрите демо-версию .

     String dataIWant = mydata.replaceFirst(".*'(.*?)'.*", "$1"); 

    как в javascript:

     mydata.match(/'([^']+)'/)[1] 

    фактическое регулярное выражение: /'([^']+)'/

    если вы используете не жадный модификатор (в соответствии с другим сообщением), это выглядит так:

     mydata.match(/'(.*?)'/)[1] 

    он чище.

    В Скала,

     val ticks = "'([^']*)'".r ticks findFirstIn mydata match { case Some(ticks(inside)) => println(inside) case _ => println("nothing") } for (ticks(inside) <- ticks findAllIn mydata) println(inside) // multiple matches val Some(ticks(inside)) = ticks findFirstIn mydata // may throw exception val ticks = ".*'([^']*)'.*".r val ticks(inside) = mydata // safe, shorter, only gets the first set of ticks 

    String dataIWant = mydata.split("'")[1];

    Посмотреть демо-версию

    Interesting Posts

    Пакетный файл Windows для копирования и подсчета имен файлов и вывода в один файл

    Преобразование MOV видеофайла, закодированного как `qtrle` в Windows с использованием FFMPEG

    Как перенаправить объявление classа шаблона в пространстве имен std?

    Как рисовать стрелку (в Android)?

    В чем разница между System.ValueTuple и System.Tuple?

    В чем разница между пропускной способностью и скоростью загрузки

    Имеет ли сеть беспроводной сети (802.11n) низкую производительность в режиме «смешанный» в режиме «бит / г»?

    Конвертировать PDF в JPG-изображения с помощью ImageMagick – как с именами файлов с 0-пэдом?

    Могу ли я отключить прокрутку звука UIPickerView?

    Как я могу диагностировать неспособность достичь определенного веб-сайта в качестве конечного пользователя?

    HTTP-redirect: 301 (постоянный) против 302 (временный)

    Результаты кэширования запросов в django

    Как написать новый символ строки в файл в Java

    Как я могу генерировать уникальные значения в препроцессоре C?

    Почему мы не должны создавать controller Spring MVC @Transactional?

    Давайте будем гением компьютера.