Автор Тема: StringRegExpReplace(): Убрать "|" по краям строки  (Прочитано 6854 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Есть строка вида:

"value1|value2|...|valueN"

Нужно убрать все пробелы и символы "|" по краям строки (если есть), например:

"   |value1|value2|...|valueN|   |||" => "value1|value2|...|valueN"

Т.к. регулярные выражения, это не про меня, то прошу помощи у "регулярщиков". Сейчас, прочитав справку, я сделал так:

Код: AutoIt [Выделить]
$sValues = StringRegExpReplace(StringRegExpReplace($sValues, '\A[\s\x7C]*', ''), '[\s\x7C]*\Z', '')


Но хотелось бы за один проход. Это возможно?



Добавлено: Июнь 23, 2010, 14:24:57
value1...valueN - это любые строковые выражения.
« Последнее редактирование: Июнь 23, 2010, 17:18:29 от Kaster, Причина: Объединение сообщений »


Думай, прежде чем говорить.

Русское сообщество AutoIt

StringRegExpReplace(): Убрать "|" по краям строки
« Отправлен: Июнь 23, 2010, 14:13:14 »

Оффлайн asdf8 [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 560
  • Репутация: 151
    • Награды
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #1, Отправлен: Июнь 23, 2010, 15:34:25 »
[?]
Цитата: Цитата
любые строковые выражения

если пробелы тоже значимы:

Код: AutoIt [Выделить]
$sValues = "   |value1|value2|...|valueN|   |||"
$sValues = StringRegExpReplace($sValues, '^(\|)*(.+?)(\|)*$', '\2')
ConsoleWrite('->' & $sValues & @CRLF)
 


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #2, Отправлен: Июнь 23, 2010, 16:25:17 »
asdf8  [?]
Цитировать
если пробелы тоже значимы
Это не удаляет в начале, вот так будет правильнее:

Код: AutoIt [Выделить]
$sValues = "   |value1|value2|...|valueN|   |||"
$sValues = StringRegExpReplace($sValues, '\A[\s\|]*|[\s\|]*$', '')
ConsoleWrite($sValues & @CRLF)

это удаляет все пробелы и символы "|" в начале и в конце строки.


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #3, Отправлен: Июнь 23, 2010, 16:32:18 »
То что надо. Спасибо.

А чем отличается "$" от "/Z"? Если записать так:

"\A[\s\|]*|[\s\|]*\Z"

Русское сообщество AutoIt

Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #3 Отправлен: Июнь 23, 2010, 16:32:18 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #4, Отправлен: Июнь 23, 2010, 16:34:51 »
Кстати у меня на эту тему есть UDF: _StringStripChars - Функция для очистки указанных символов в строке

Yashied
Ты должен был знать про это, т.к что то (что?) изменил в том сообщении :)

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #5, Отправлен: Июнь 23, 2010, 16:38:55 »
Ты должен был знать про это, т.к что то (что?) изменил в том сообщении...

???

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: StringRegExpReplace(): Убрать \"|\" по краям строки
« Ответ #6, Отправлен: Июнь 23, 2010, 16:45:06 »
Yashied  [?]
Цитировать
чем отличается "$" от "/Z"?
от /Z почти ничем, но если использовать в начале шаблона (?m), тогда "$" будет также означать окончание строки перед символом перевода строки (CR/LF), но и конец всей строки тоже сможет определить. Это полезно использовать когда очистку нужно сделать у мультистрокового текста:

Код: AutoIt [Выделить]
$sValues = "   |value1|value2|...|valueN|   |||" & @CRLF & '|||valueNN||  | ||'
$sValues = StringRegExpReplace($sValues, '(?m)^[\s\|]*|[\s\|]*$', '')
ConsoleWrite($sValues & @CRLF)



Добавлено: Июнь 23, 2010, 16:45:58
Yashied  [?]
Цитировать
???
[?]
Цитировать
« Последнее редактирование: Октябрь 04, 2009, 19:09:56 от Yashied »
« Последнее редактирование: Июнь 23, 2010, 21:25:51 от CreatoR »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379

  • Автор темы
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: StringRegExpReplace(): Убрать \"|\" по краям строки
« Ответ #7, Отправлен: Июнь 23, 2010, 16:47:58 »
...от \Z почти ничем, но если использовать в начале шаблона (?m), тогда "$" будет также означать окончание строки перед символом перевода строки (CR/LF), но и конец всей строки тоже сможет определить. Это полезно использовать когда очистку нужно сделать у мультистрокового текста...

:wacko:

Это точно не про меня. Что-то не дружу я с рег. выражениями, но все равно спасибо.

Русское сообщество AutoIt

Re: StringRegExpReplace(): Убрать \"|\" по краям строки
« Ответ #7 Отправлен: Июнь 23, 2010, 16:47:58 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #8, Отправлен: Июнь 23, 2010, 17:22:54 »
OffTopicТема решена?  ;D
Конференция посвященная AutoIt на jabber.ru - [email protected]
Как попасть на конференцию читаем тут


Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExpReplace(): Убрать \"|\" по краям строки
« Ответ #9, Отправлен: Июнь 23, 2010, 20:17:54 »
А почему :
 [\s\|]
а не
 [\s|]
Помоему внутри множества  отмена специального смысла символа "|" не требуется
« Последнее редактирование: Июнь 23, 2010, 21:30:45 от gregaz, Причина: Объединение сообщений »
Самая большая проблема – её сформулировать. 

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7827
  • Репутация: 2288
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #10, Отправлен: Июнь 23, 2010, 21:28:15 »
gregaz  [?]
Цитировать
Помоему внутри множества  отмена специального смысла символа "|" не требуется
Не требуется, но это мера осторожности, оно не мешает во всяком случае.

Русское сообщество AutoIt

Re: StringRegExpReplace(): Убрать "|" по краям строки
« Ответ #10 Отправлен: Июнь 23, 2010, 21:28:15 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
13021 Просмотров
Последний ответ Октябрь 07, 2009, 09:36:42
от akoulev
12 Ответов
12952 Просмотров
Последний ответ Декабрь 01, 2012, 02:05:11
от defens
14 Ответов
13153 Просмотров
Последний ответ Февраль 13, 2010, 22:44:00
от akoulev
2 Ответов
8467 Просмотров
Последний ответ Март 15, 2010, 14:59:44
от kuzyaka
2 Ответов
7984 Просмотров
Последний ответ Ноябрь 02, 2010, 11:58:00
от Linaleks
8 Ответов
21667 Просмотров
Последний ответ Февраль 09, 2011, 22:04:08
от Kaster
0 Ответов
2364 Просмотров
Последний ответ Март 15, 2012, 23:22:41
от Pavel
0 Ответов
1632 Просмотров
Последний ответ Декабрь 04, 2012, 14:16:01
от vaf
10 Ответов
4014 Просмотров
Последний ответ Январь 30, 2013, 19:30:17
от AZJIO
0 Ответов
306 Просмотров
Последний ответ Декабрь 16, 2017, 23:24:14
от perven1