Перевести perl-split на python split

В perl:

split(/(?<=[KR])/,$mystring)

разбивает мистификацию после каждого K или R через два понятия "разделить между каждым символом" (= пустая строка) + "lookbehind". Таким образом, последовательность AAAKBBBBR становится (AAAK, BBBBR).

Что представляет собой копия на питоне? Я не могу найти способ, потому что пустая строка не разделяется между символами!

1 ответ

Вам действительно нужно оглянуться? Это регулярное выражение должно делать это [^KR]*[KR]:

In [1]: import re # Import the regex library
In [2]: s = "AAAKBBBBR" # Define the input string
In [3]: re.findall(r'[^KR]*[KR]', s) # Find all the matches in the string
Out[3]: ['AAAK', 'BBBBR']

Regexplanation:

[^KR] # ^ in character classes is negation so will match any character except K/R
* # Quantifier used to match zero or more of the previous expression
[KR] # Simple character class matching K/R

В словах: совпадение нуля или более символов, которые не являются K/R, за которыми следует K/R.

Возможно, вы захотите использовать квантификатор + для сопоставления хотя бы одного или нескольких вместо * для таких случаев, как:

In [1]: import re
In [2]: s = "KAAAKBBBBR"
In [3]: re.findall(r'[^KR]*[KR]', s)
Out[3]: ['K', 'AAAK', 'BBBBR']
In [4]: re.findall(r'[^KR]+[KR]', s)
Out[4]: ['AAAK', 'BBBBR']

Чтобы сделать трейлинг [KR] дополнительным, вы можете использовать ? :

In [5]: s = 'AAAKBBBBRAAA'
In [6]: re.findall(r'[^KR]+[KR]?', s)
Out[6]: ['AAAK', 'BBBBR', 'AAA']

licensed under cc by-sa 3.0 with attribution.