2013-12-20 2 views
3

Я предполагаю, что лучший способ сделать это с помощью регулярного выражения, но я не знаю, как это сделать. Я пытаюсь разобрать строку и помещать пробел между буквами и пунктуацией. Я хочу держать знаки препинания вместе. В качестве примера, если у меня есть строкаpython regex, вставляя пробел между пунктуацией и буквами

«да !!!»

Я хочу закончить с

"да", "!!!".

Если у меня есть строка

!!! n00bs,

Я хочу закончить с

"!!!", "n00bs"

Возможно ли это? Каков наилучший способ сделать это? Сейчас я разбираю каждое письмо, и это глупый способ сделать это.

Спасибо за помощь.

+0

Я знаю, что вы сказали, что просто хотел вырезать знаки препинания, но на всякий случай, если вы захотите это сделать, а также хотите вырезать другие не-буквенно-цифровые символы за один раз, например (@ # $%^& * (() <> + =) или что-то еще, вы можете просто использовать '\ w' и' \ W'. Это довольно приятно. Если вы используете Python 3.x, он будет автоматически выполнять символы Unicode. – Shule

ответ

9

что-то вроде этого:

txt = re.sub(r'([a-zA-Z])([,.!])', r'\1 \2', '!!!this, .is, .a .test!!!') 

вы можете переключить заказ на другую сторону

re.sub(r'([,.!])([a-zA-Z])', r'\1 \2', txt) 

вероятно, вы можете также сделать его работу в одном из регулярных выражений, а также

+0

Это почти что. он, похоже, не работает, если знак препинания ведет как то, что у вас было до того, как вы его изменили «! is». Я пытаюсь получить пробел между знаками препинания и альфа-символами –

+0

Я изменил его, потому что я не знал, хотите ли вы этого случая. я отредактирую свой ответ. –

+0

Спасибо, это полностью для меня, чтобы я не был явным. –

0

Если вы только хотите добавить место, возможно, заменить?

x = x.replace('!',' ') 

Возможно, вам придется использовать дополнительные замены для удаления пробелов между пунктуацией и пунктуацией.

0

Я хотел бы использовать:

(.+)\b(.+) 

Он работает как yes!!! и !!!N00bs

Пояснение:

The regular expression: 

(?-imsx:(.+)\b(.+)) 

matches as follows: 

NODE      EXPLANATION 
---------------------------------------------------------------------- 
(?-imsx:     group, but do not capture (case-sensitive) 
         (with^and $ matching normally) (with . not 
         matching \n) (matching whitespace and # 
         normally): 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    .+      any character except \n (1 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
    \b      the boundary between a word char (\w) and 
          something that is not a word char 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
    .+      any character except \n (1 or more times 
          (matching the most amount possible)) 
---------------------------------------------------------------------- 
)      end of \2 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
Смежные вопросы