Используйте regex и python для организации вывода текстового файла regex.sub - PullRequest
0 голосов
/ 07 апреля 2019
import re
import fileinput
import re

#regex used
#result = re.split('(?<=\S)[^-][ ](?=[a-zA-Z0-9])', line)

<---- это написано в несколько строк, но один символ пропущен во многих строках и не очень правильно, поэтому я много искал и мне пришлось добавить «$», как показано ниже: </p>

result = re.split('(?<=\S$)[^-][ ](?=[a-zA-Z0-9])', line) <---- это дает очень хороший результат, но теперь у меня склеены некоторые слова, которые не были разделены, я знаю буквы, которые предшествуют заглавной букве, например "***** J", мне нужно иметь«***** J», а затем вернуть обратно буквы, похожие на Sentence1 Sentence2 Sentence2, и тогда я готов!У меня возникли проблемы с использованием re.sub, а затем все новые строки, как я хочу, чтобы окончательный вывод. </p>

line = "WordsAreStickedTogetherHereIneedOneSpaceBetweeeThem"

result = re.split('(?<=\S$)[^-][ ](?=[a-zA-Z0-9])', line)

final_result = re.sub('dM','d M',result)
final_result = re.sub('dJ','d J',result)

for elem in final_result:
        print elem


ERRROR:

$python main.py
Traceback (most recent call last):
  File "main.py", line 22, in <module>
    final_result = re.sub('dC','d C',result)
  File "/usr/lib64/python2.7/re.py", line 155, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer

1 Ответ

3 голосов
/ 07 апреля 2019

Если вам нужно только разделить слова (слово представляет собой заглавную букву, за которой следуют строчные буквы), тогда вы можете просто использовать re.finditer:

line = "WordsAreStickedTogetherHereINeedOneSpaceBetweeeThem"
matches = re.finditer("[A-Z][a-z]*", line)
new_line = " ".join(match.group() for match in matches)

Переменная new_line содержит:

>>> print(new_line)
'Words Are Sticked Together Here I Need One Space Betweee Them'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...