Как написать скрипт для итеративного поиска в документе и возврата результатов на основе шаблона - PullRequest
1 голос
/ 17 октября 2019

У меня есть большой документ, содержащий элементы, которые отображаются по определенному шаблону: «ТЕКСТ, КОТОРЫЙ Я НУЖЕН», «(Запятая заканчивает текст, который я хочу вернуть)» больше текста, который мне не нужен «». "«ТЕКСТ, КОТОРЫЙ Я НУЖЕН» (нужен текст, следующий сразу за точкой) «,» (Запятая заканчивает текст)… и т. Д.

Я надеюсь написать скрипт, который пройдет через документ и вытащит(Текст, который мне нужен).

Я не очень старался. Я пытался поиграть с re.compile, но я в основном новичок.

Пример документа: ЯБЛОКИ РАЗЛИЧНЫЕ, апельсины лучше. ОРАНЖЕВЫЕ ВЕСЕЛЫЕ, бананы лучше. Бананы странные, бананы немного странные.

Я хочу вернуться: Яблоки веселые, веселые Бананы странные

Ответы [ 3 ]

1 голос
/ 17 октября 2019

Если вам нужны только заглавные буквы ASCII, это выглядит следующим образом:

[A-Z]+
  • Квадратные скобки определяют набор вещей для соответствия
  • Дефис определяет диапазон,в данном случае от заглавной буквы A к заглавной Z
  • Знак «плюс» говорит как минимум об одном из этих символов в этом диапазоне, но, возможно, о большем, если они находятся рядом друг с другом

Пример:

http://regexr.com/4n1s1

import re
pattern = re.compile('[A-Z]+')
matches = pattern.findall('APPLES ARE FUN, oranges are better. ORANGES ARE FUN, bananas are better')
print(matches)
# ['APPLES', 'ARE', 'FUN', 'ORANGES', 'ARE', 'FUN']
0 голосов
/ 17 октября 2019

Извлечение текста, предшествующего ',' и начинающегося с begin of text(^) или '.':

import re

text = """APPLES ARE FUN, oranges are better. ORANGES ARE FUN, bananas are better. BANANAS ARE WEIRD, bananas are a little weird"""

print(re.findall('(?:^|\.\s+)([\w\s]+)(?=,)', text))
# ['APPLES ARE FUN', 'ORANGES ARE FUN', 'BANANAS ARE WEIRD']
0 голосов
/ 17 октября 2019

в зависимости от вашего шаблона вы можете использовать что-то вроде следующего:

from re import findall as regexSearch

with open("./myFileName.txt", "r") as myFile:
    content = myFile.read()

pattern = r"[A-Z ]{2,}"
matches = regexSearch(pattern, content)
for match in matches:
    print(match)

хорошим инструментом для тестирования шаблонов является regex101.com . Это также объясняет, что он нашел и почему он это нашел.

...