Regex для захвата переносимых слов, разделенных символом новой строки - PullRequest
0 голосов
/ 09 октября 2018

У меня есть шаблон, такой как word- \ nword , то есть слова переносятся и разделяются символом новой строки.

Я хотел бы вывод в виде слова-слова.Я получаю слово- \ nword с кодом ниже.

    text_string = "word-\nword"
    result=re.findall("[A-Za-z]+-\n[A-Za-z]+", text_string)
    print(result)

Я пробовал это, но не сработало, я не получил результата.

   text_string = "word-\nword"
   result=re.findall("[A-Za-z]+-(?=\n)[A-Za-z]+", text_string)
   print(result)

Как мне этого добиться.Спасибо!

Редактировать:

Будет ли эффективным сделать замену и выполнить простое регулярное выражение

text_string = "aaa bbb ccc-\nddd eee fff"
replaced_text = text_string.replace('-\n', '-')
result = re.findall("\w+-\w+",replaced_text)
print(result) 

или использовать метод, предложенный CertainPerformance

text_string = "word-\nword"
result=re.sub("(?i)(\w+)-\n(\w+)", r'\1-\2', text_string)
print(result)

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Вы должны использовать re.sub вместо re.findall:

result = re.sub(r"(?<=-)\n+", "", test_str)

Это соответствует любым новым строкам после - и заменяет его пустой строкой.

Демо

В качестве альтернативы вы можете использовать

(?<=-)\n(?=\w)

, который соответствует новым строкам, только если перед и стоит символ *1017*, за которым следуют символы слова.

0 голосов
/ 09 октября 2018

Вы можете просто заменить любые вхождения '-\n' на '-' вместо:

result = text_string.replace('-\n', '-')
0 голосов
/ 09 октября 2018

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

result=re.sub("(?i)([a-z]+)-\n([a-z]+)", r'\1\2', text_string)

В противном случае, если в строке есть другие элементы, выполните итерации по каждому совпадению и присоединитесь к группам:

text_string = "wordone-\nwordtwo wordthree-\nwordfour"
result=re.findall("(?i)([a-z]+)-\n([a-z]+)", text_string)
for match in result:
    print(''.join(match))
...