Как разделить строку, используя Regex, указав c String - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть значение (String), например "BLD00000001BLD00000002 BLD00000003, BLD00000004".

Я хочу использовать Regex """^BLD\d{8}"""

, но оно не работает ..

Я хочу вернуть результаты, такие как (BLD00000001 ',' BLD00000002 ',' BLD00000003 ...)

        var regex = Regex("""[\{\}\[\]\/?.,;:|\) *~`!^\-_+<>@\#$%&\\\=\(\'\"]""")
        val cvrtBldIds = bldIds.split(regex)

        if (cvrtBldIds.joinToString(separator="").length % 11 != 0) {
            throw BadRequestException("MSG000343", listOf("빌딩Id", "BLD[숫자8자리]"))
        } else {
            val res = cvrtBldIds
                .filter{it.startsWith("BLD")}   // BLD로 시작하는 것만 추출
                .joinToString(separator = "','")      // 아이디 앞뒤로 ',' 붙이기 
            bldIds = res
            var sb = StringBuffer()
            sb.append("'")
            sb.append(bldIds)
            sb.append("'")
            input.bldId = sb.toString()
        }

Ответы [ 3 ]

0 голосов
/ 13 апреля 2020

Похоже, вы хотите разделить на пробел, или комбо-пробел, или между ди git и текстом BLD. Следующее регулярное выражение может сделать это:

,?\s|(?<=\d)(?=BLD)

См. regex101 для демонстрации.

0 голосов
/ 13 апреля 2020

Вот как можно извлечь BLD\d{8} совпадения с образцами в Kotlin, используя .findall () :

val text = """"BLD00000001BLD00000002 BLD00000003, BLD00000004"."""
val matcher = """BLD\d{8}""".toRegex()
println(matcher.findAll(text).map{it.value}.toList() )
// => [BLD00000001, BLD00000002, BLD00000003, BLD00000004]

См. Демонстрационную версию Kotlin

0 голосов
/ 13 апреля 2020

Сделайте это следующим образом:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "BLD00000001BLD00000002 BLD00000003, BLD00000004";
        List<String> list = new ArrayList<String>();
        Pattern pattern = Pattern.compile("BLD\\d{8}");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            list.add(matcher.group());
        }
        System.out.println(list);
    }
}

Вывод:

[BLD00000001, BLD00000002, BLD00000003, BLD00000004]

Примечания:

  1. BLD\\d{8} означает, начиная с BLD и затем 8 цифр.
  2. Java regex tutorial: https://docs.oracle.com/javase/tutorial/essential/regex/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...