Регулярное выражение для замены пробелов тире в подстроке. - PullRequest
3 голосов
/ 29 июля 2011

Я изо всех сил пытался найти способ заменить пробелы в тире в строке, но только пробелы, которые находятся в определенной части строки.

Источник:

ABC *This is a sub string* DEF

Моя попытка регулярного выражения :

/\s/g

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

ABC-*This-is-a-sub-string*-DEF

Но я хочу заменить только пробелы в тексте, окруженные двумя звездочками.

Вот что я пытаюсь достичь:

ABC *This-is-a-sub-string* DEF

Не уверен, почему тип регулярных выражений я использую, так как использую поиск и замену в TextMate с включенной опцией Регулярные выражения.

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

Любая помощь будет оценена.

Ответы [ 5 ]

2 голосов
/ 29 июля 2011

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

Регулярное выражение

\ (?=[^*]*\*([^*]*\*[^*]*\*)*[^*]*$)

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

2 голосов
/ 29 июля 2011
s/(?<!\*)\s(?!\*)(?!$)/-/g

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

1 голос
/ 29 июля 2011

попробуйте этот

/(?<=\*.*)\s(?=.*\*)/g

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

0 голосов
/ 29 июля 2011

Используйте это регулярное выражение, чтобы получить пробелы из звездочек (.<em>)(*(.</em>(\ ).<em>)*)(.</em>) Возьмите 4-й элемент массива, предоставленный регулярным выражением {4}, и замените его на тире.

I , находим этот сайт очень хорошим для создания регулярных выражений.

0 голосов
/ 29 июля 2011

Попробуйте это: \s(\*[^*]*\*)\s.Это будет соответствовать *This is a sub string* в группе 1. Затем заменить на -$1-.

...