регулярное выражение разделить строку по определенным значениям - PullRequest
0 голосов
/ 11 ноября 2019

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

У меня есть следующая строка, например:

abc.def.ghi:wxyz_1234

Я хотел бы получить оба ' wxyz 'и' 1234 '.

то есть строка между ':' и '_' и строка после '_'

Приветствия!

Ответы [ 3 ]

3 голосов
/ 11 ноября 2019

Метод 1

Возможно,

([^\s:_]+)_(\S+)

может работать нормально.

RegEx Demo 1


Метод 2

С помощью lookbehind для создания левой границы для строки подчеркивания:

(?<=:)([^_]+)_(.+)

RegEx Demo 2

Test

import re

string = '''
abc.def.ghi:wxyz_1234
abc.def.ghi:abcd_78910
abc.def.ghi: foo_baz123
'''

expression = r'([^\s:_]+)_(\S+)'

for i in re.findall(expression, string):
    print(i[0])
    print(i[1])

Вывод

wxyz
1234
abcd
78910
foo
baz123

Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . При желании вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

2 голосов
/ 11 ноября 2019
string str = "abc.def.ghi:wxyz_1234";    
Regex rx = new Regex(":(.*)_(.*)");    
Match match = rx.Match(str);    
string first =match.Groups[1].Value;    
string second= match.Groups[2].Value;
1 голос
/ 12 ноября 2019

Мне удалось создать следующее дело A - (?<=:)(.+)(?=_) дело B - (?<=_).*

Угадайте, что варианты бесконечны ...

Спасибо за вашу помощь!

...