Регулярное выражение для замены дефиса в середине слова - PullRequest
2 голосов
/ 18 июня 2009

Мне нужно регулярное выражение, чтобы заменить дефисы в середине любого слова, но не касаться начальных или конечных или автономных. Это для использования в .NET в Regex.Replace ()

Я пробовал следующее

\w[-]\w

но это также захватывает символ по обе стороны от дефиса. Как пример, мне нужна следующая строка

-тест тест-тест -тест

Если символ замены был!, Стать

тест-тест! Тест-тест

Любая помощь, полученная очень

Спасибо

Джеймс

Ответы [ 4 ]

6 голосов
/ 18 июня 2009

Если я правильно понимаю вопрос, речь идет о сопоставлении дефиса, а не слов рядом с ним. Вот регулярное выражение, похожее на perl:

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

Это положительный взгляд за утверждением, один дефис и положительное предпросмотр.

1 голос
/ 18 июня 2009
echo "- foo-bar - bar-foo -" | sed -e 's/\([[:alnum:]]\)-\([[:alnum:]]\)/\1\2/g'

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

1 голос
/ 18 июня 2009

В Perl (вы не упомянули язык) это работает:

/\w-\w/

например, попробуйте этот однострочный:

mine:~> perl -e '$x="abc-def"; $x=~/\w(-)\w/; print "$x $1\n";'
abc-def -

или этот:

mine:~> perl -e '$x="abc-def"; print "$x\n";$x=~s/(\w)-(\w)/$1 $2/; print "$x\n";'
abc-def
abc def

Вот пример (из комментариев) замены все соответствующего '-' в строке:

mine:~> perl -e '$x="-this i-s a te-st-"; print "$x\n";$x=~s/(\w)-(\w)/$1$2/g; print "$x\n";'
-this i-s a te-st-
-this is a test-

Обратите внимание, что в этом примере я просто удалил черту, в то время как в предыдущих примерах я заменил ее пробелом. Я также добавил модификатор g в команду подстановки, чтобы он заменял все вхождения '-'.

0 голосов
/ 18 июня 2009

это регулярное выражение соответствует всем словам с ровно одним дефисом:

[a-zA-Z]+[-][a-zA-Z]+

это эквивалентно:

\w+[-]\w+

Ваше выражение соответствует букве перед дефисом, дефису и букве после дефиса. Он находит все дефисы, которые вы хотите, даже в словах с более чем одним дефисом. Как вы хотите заменить дефисы? Можете ли вы быть более точным в своих целях?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...