Как разбить строку на цифры и алфавиты с помощью Regex - PullRequest
3 голосов
/ 15 апреля 2010

Я хочу разбить строку типа "001A" на "001" и "A"

Ответы [ 6 ]

4 голосов
/ 15 апреля 2010
string[] data = Regex.Split("001A", "([A-Z])");
data[0] -> "001"
data[1] -> "A"
4 голосов
/ 15 апреля 2010
Match match = Regex.Match(s, @"^(\d+)(.+)$");
string numeral = match.Groups[1].Value;
string tail = match.Groups[2].Value;
2 голосов
/ 15 апреля 2010

Это Java, но она должна быть переведена на другие разновидности с небольшими изменениями.

    String s = "123XYZ456ABC";
    String[] arr = s.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
    System.out.println(Arrays.toString(arr));
    // prints "[123, XYZ, 456, ABC]"

Как вы можете видеть, это разбивает строку там, где за \d следует \D или наоборот. Он использует положительных и отрицательных значений , чтобы найти места для разделения.

1 голос
/ 15 апреля 2010

Если ваш код такой же простой и сложный, как и образец 001A, вы должны использовать не Regex, а цикл for.

0 голосов
/ 15 апреля 2010

А если есть еще что-то вроде 001A002B, тогда вы могли бы

    var s = "001A002B";
    var matches = Regex.Matches(s, "[0-9]+|[A-Z]+");
    var numbers_and_alphas = new List<string>();
    foreach (Match match in matches)
    {
        numbers_and_alphas.Add(match.Value);
    }
0 голосов
/ 15 апреля 2010

Вы можете попробовать что-то вроде этого, чтобы получить целые числа из строки:

StringBuilder sb = new StringBuilder();
Regex regex = new Regex(@"\d*");
MatchCollection matches = regex.Matches(inputString);
for(int i=0; i < matches.count;i++){
    sb.Append(matches[i].value + " ");
}

Затем измените регулярное выражение для сопоставления с символами и выполните тот же цикл.

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