Как заменить заготовку - PullRequest
0 голосов
/ 19 июня 2010

С учетом кода:

import clr
clr.AddReference('System')

from System.Text.RegularExpressions import *

def ReplaceBlank(st):
    return Regex.Replace(
        st,r'[^a-z\s](\s+)[^a-z\s]',
        lambda s:s.Value.Replace(' ', ''),RegexOptions.IgnoreCase)

Я ожидаю, что ABC EDF вернет ABCDEF, но он не работает, что я сделал не так?

1 Ответ

1 голос
/ 19 июня 2010

[^a-z\s] при установленном флаге игнорирования соответствует чему-либо, кроме букв и пробельных символов.^ в начале класса символов (значение между []) отменяет класс символов.

Чтобы заменить пробелы, вы можете просто заменить \s+ пустыми строками или, если вам нужно сопоставитьтолько буквы заменяют

(?<=[a-z])\s+(?=[a-z])

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

(?<=(^|[a-z]))\s+(?=($|[a-z]))

или

\b\s+\b  

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

...