python: эквивалент re.findall без регулярных выражений

Мне было интересно, существует ли что-либо из следующего в python:

  • A: нерегулярный эквивалент "re.findall()".
  • B: способ нейтрализовать специальные символы регулярных выражений в переменной перед передачей в findall().

Я передаю переменную в re.findall, которая сталкивается с проблемами, когда переменная имеет точку, косую черту, карат и т. д., потому что я хотел бы, чтобы эти символы интерпретировались буквально. Я понимаю, что для этой работы нет необходимости использовать регулярное выражение, но мне нравится поведение re.findall(), потому что оно возвращает список всех найденных совпадений. Это позволяет мне легко подсчитать, сколько раз существует подстрока, используя len().

Вот пример моего кода:

>>substring_matches = re.findall(randomVariableOfCharacters, document_to_be_searched)
>>
>>#^^ will return something like ['you', 'you', 'you']
>>#but could also return something like ['end.', 'end.', 'ends']
>>#if my variable is 'end.' because "." is a wildcard.
>>#I would rather it return ['end.', 'end.']
>>
>>occurrences_of_substring = len(substring_matches)

Я надеюсь, что мне не придется использовать string.find(), если это возможно. Любая помощь и/или совет приветствуется!


person James M. Lay    schedule 16.06.2012    source источник
comment
(B:) re.escape для регулярных выражений, но, вероятно, лучший метод (А).   -  person Wrikken    schedule 17.06.2012
comment
Начни с описания, пожалуйста. Не говоря уже о регулярных выражениях, что вы действительно пытаетесь сделать?   -  person Karl Knechtel    schedule 17.06.2012


Ответы (2)


Вы можете использовать str.count(), если вам нужно только количество вхождений, но их не эквивалентен re.findall(), он получает только подсчет.

document_to_be_searched = "blabla bla bla."
numOfOcur = document_to_be_searched.count("bl")
person Darth Plagueis    schedule 16.06.2012
comment
Спасибо, что поделились. Этот подход намного элегантнее. - person James M. Lay; 17.06.2012
comment
@JamesM.Lay Надеюсь, это помогло, приятель. - person Darth Plagueis; 17.06.2012

Конечно: глядя на ваш код, я думаю, что вы ищете string.count.

>>> 'abcdabc'.count('abc')
2

Однако обратите внимание, что это не эквивалентно re.findall; хотя в вашем случае это выглядит более уместно.

person Thomas Orozco    schedule 16.06.2012
comment
Ого, намного лучше, чем мой подход. Благодарю вас! - person James M. Lay; 17.06.2012