Есть ли способ объединить несколько pnp предоставления xml в один?

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

>>> s = "Wilbur Smith (Billy, son of John), Eddie Murphy (John), Elvis Presley, Jane Doe (Jane Doe)"
>>> r = re.compile(r'(?:[^,(]|\([^)]*\))+')
>>> r.findall(s)
['Wilbur Smith (Billy, son of John)', ' Eddie Murphy (John)', ' Elvis Presley', ' Jane Doe (Jane Doe)']

Повторное выражение выше соответствует одному или нескольким:

  • номерам без запятой, не-открытым-парным символам
  • , которые начинаются с открытым парном, содержат 0 или более не-закрытых парен, а затем близкий парен

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

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

"Wilbur Smith (son of John (Johnny, son of James), aka Billy), Eddie Murphy (John)"

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

0
задан TimHaka 19 March 2019 в 09:28
поделиться