Regex для загрузки целого числа пар «ключ-значение», например, 3 ключ1, значение1, ключ2, значение2, ключ3, значение3 - PullRequest
1 голос
/ 28 мая 2019

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

, например

..... 2 "value1" "value2" "someother non-related text"
..... 0 "someother non-related text"

Также целое число разделенных пробелами пар ключ-значение после целого числа или

..... 3 key1 "value1" key2 "value2" key3 "value3"......

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

3 "value1" "value2" "value3" "someother non-related text"

(?<my_named_group>([0])|[0-9] (?<my_values>(".*"?)?))

my_named_group = 3
my_values = '"value1" "value2" "value3"'

и когда целое число равно нулю

my_named_group = 0
my_values = ""

и для второго вопроса / регулярного выражения

3 key1 "value1" key2 "value2" key3 "value3" "someother non-related text"

my_named_group = 3
my_values = 'key 1 "value1" key 2 "value2" key3 "value3"'

1 Ответ

0 голосов
/ 28 мая 2019

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

([0-9]+).+?(\".*\")

где желаемые цифры находятся в первой группе захвата ([0-9]+), а другая желаемая подстрока находится во второй, (\".*\").

Тест

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"([0-9]+).+?(\".*\")"

test_str = ("2 \"value1\" \"value2\" \"someother non-related text\"\n"
    "0 \"someother non-related text\"\n"
    "3 key1 \"value1\" key2 \"value2\" key3 \"value3\"")

subst = "\\1\\n\\2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

DEMO

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