2016-08-08 3 views
1

Я пытаюсь использовать регулярное выражение для замены некоторых проблем в некотором тексте.Подменю Regex в Python приводит к появлению символов ASCII

Строки выглядеть следующим образом:

a = "Here is a shortString with various issuesWith spacing"

Моя регулярное выражение выглядит следующим образом прямо сейчас: new_string = re.sub("[a-z][A-Z]", "\1 \2", a).

Это занимает те места с отсутствующими пробелами (всегда есть прописная буква после строчной буквы) и добавляет пробел.

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

Here is a shor\x01 \x02tring with various issue\x01 \x02ith spacing

Я хочу, чтобы выглядеть следующим образом:

b = "Here is a short String with various issues With spacing"

кажется, что регулярное выражение правильно сопоставляя правильные экземпляры вещи, которые я хочу изменить, но что-то не так с моей заменой. Я думал, что \1 \2 означает замену первой частью регулярного выражения, добавьте пробел, а затем добавьте второй согласованный элемент. Но почему-то я получаю что-то еще?

+0

Вам нужно сырые строки. Добавьте 'r' перед обеими строковыми объявлениями. 'r" [a-z] [A-Z] ", r" \ 1 \ 2 "'. –

+2

Вы не установили группы захвата, используйте '' ([a-z]) ([A-Z]) ". И используйте 'r '\ 1 \ 2'' –

ответ

2
>>> a = "Here is a shortString with various issuesWith spacing" 
>>> re.sub("([a-z])([A-Z])", r"\1 \2", a) 
'Here is a short String with various issues With spacing' 

Группа захвата и обратная косая черта исчезли.

вы можете пойти еще дальше:

>>> a = "Here is a shortString with various issuesWith spacing" 
>>> re.sub('([a-z])([A-Z])', r'\1 \2', a).lower().capitalize() 
'Here is a short string with various issues with spacing' 
1

Вы должны определить группы захвата, а также использовать сырые строковые литералы:

import re 
a = "Here is a shortString with various issuesWith spacing" 
new_string = re.sub(r"([a-z])([A-Z])", r"\1 \2", a) 
print(new_string) 

См Python demo.

Обратите внимание, что без префикса r'' Python интерпретировал \1 и \2 как символы, а не в качестве обратных ссылок с момента \ был проанализирован как часть последовательности. В строковых литералах строка \ анализируется как буквальная обратная косая черта.

0

Вы можете попробовать так:

>>>> import re 
>>>> a = "Here is a shortString with various issuesWith spacing" 
>>>> re.sub(r"(?<=[a-z])(?=[A-Z])", " ", a) 
>>>> Here is a short String with various issues With spacing 
Смежные вопросы