Автор Тема: Регулярка которая найдет все строки в которых нет определенного символа  (Прочитано 1855 раз)

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

Оффлайн mitiya [?]

  • Новичок
  • *
  • Сообщений: 66
  • Репутация: 0
    • Награды
Подскажите регулярку которая найдет все строки в которых нет определенного символа.

собственно есть вот примерно такой текст

pip|1.2.0|1.2.0|false
PowerShell|5.1.14409.20170510|5.1.14409.20170510|false
python|3.6.2|3.6.2|false
hg fsghjdgsh ghj.
python3|3.6.2|3.6.2|false
qbittorrent|3.3.15|3.3.15|false
rsync|5.5.0.20160518|5.5.0.20160518|false

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

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


Помечен как лучший ответ пользователем mitiya Отправлен Август 16, 2017, 14:47:17

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3579
  • Репутация: 947
    • Награды
  • Версия AutoIt: 3.3.14.0

Оффлайн Nbv_tim [?]

  • Новичок
  • *
  • Сообщений: 47
  • Репутация: 1
    • Награды
Код: AutoIt [Выделить]
#include <File.au3>
global $h
 $R='|'
 $g=_FileCountLines(@ScriptDir & "\" & "10.txt")
 for $i=1 to $g
     $t=FileReadLine(@ScriptDir & "\" & "10.txt",$i)
        if $h=StringInStr($t,$R) Then
            StringRegExp($t,' ',1)
        Else
                    FileWriteLine(@ScriptDir & "\" & "11.txt",$t)
        EndIf
        Next


так пойдет?

Оффлайн mitiya [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды
Код: AutoIt [Выделить]
$text = StringRegExpReplace($text, "(?m)^[^|]*\R", "")


спасибо. только лучше (?m)^[^|]*\$
а то последнюю строку не обрабатывает ибо у нее в конце нет перевода строки.

Можете объяснить как работает выражение  до *\$  ?

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


Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
OffTopicДобавил.
Часто используемые выражения / шаблоны
Спасибо InnI.


Добавлено: Август 16, 2017, 14:56:06
mitiya  [?]
Цитировать
а то последнюю строку не обрабатывает ибо у нее в конце нет перевода строки
Обрабатывает всё, в том числе и последнюю строку без перевода строи в конце.

Скорблю и помню.




Оффлайн mitiya [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды


И я бы хотел понять как все таки оно работает

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
mitiya
Конкретно к вашей задачи из первого поста всё отлично работает!
Поэтому не надо говорить - mitiya  [?]
Цитировать
а то последнюю строку не обрабатывает ибо у нее в конце нет перевода строки.
Если у вас возникла проблема с шаблоном, опишите её или изначально описывайте задачу более точно.



Добавлено: Август 16, 2017, 15:21:27
Вот вариант для массива.
Код: AutoIt [Выделить]
#include<Array.au3>

$sText = FileRead("24258.txt")
_ArrayDisplay(StringRegExp($sText, "(?m).*[^\s\w+\.].*", 3))

Конкретно к двум вашим вариантам задач подходит.
« Последнее редактирование: Август 16, 2017, 15:21:51 от Garrett »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3579
  • Репутация: 947
    • Награды
  • Версия AutoIt: 3.3.14.0
mitiya
Цитировать
последнюю строку не обрабатывает ибо у нее в конце нет перевода строки
Код: AutoIt [Выделить]
"(?m)^[^|]*($|\R)"

(?m) - включение построчного режима
^ - начало строки
[^|]* - любой символ, отличный от "|", повторяемый ноль и более раз
($|\R) - конец строки ИЛИ любой символ перевода строки

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


Оффлайн mitiya [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды
Цитировать
Поэтому не надо говорить

А буду. И говорю я что только то что \R не обрабатывает конец строки и только. А вы мне что мол обрабатывает.
Дак вот не обрабатывает. О чем спор не понятно. Более того, я автору комментария и и плюс поставил, и спасибо сказал, и не спорю нисколько с ним.

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
mitiya  [?]
Цитировать
И говорю я что только то что \R не обрабатывает конец строки и только. А вы мне что мол обрабатывает.

Garrett  [?]
Цитировать
Конкретно к вашей задачи из первого поста всё отлично работает!
Где я сказал что \R обрабатывает символы перевода и конца строки

mitiya  [?]
Цитировать
О чем спор не понятно.
Никто не спорит.
Просто RegExp не терпит - "а если...". Есть конкретные задачи, есть конкретные решения.

А если встретится такая строка asdsad pq|owe. И всё приплыли.
Придётся создавать новый шаблон учитывающий ваши а если.

Посему, нужно продумывать варианты по максимуму и составить единую задачу для всех если.
1. Это простое уважение к помогающим (не придётся делать лишнюю работу).
2. Вы получите максимум помощи.


Добавлено: Август 16, 2017, 16:10:03
mitiya  [?]
Цитировать
Более того, я автору комментария и плюс поставил
Мне самому вариант от InnI понравился! Хорошее решение!
« Последнее редактирование: Август 16, 2017, 17:21:18 от Garrett »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3579
  • Репутация: 947
    • Награды
  • Версия AutoIt: 3.3.14.0
Garrett
Цитировать
А если встретится такая строка asdsad pq|owe. И всё приплыли.
Не понял, почему "приплыли"? Эта строка не будет удалена. Вроде как это и требуется :think:

Оффлайн mitiya [?]

  • Новичок
  • *
  • Сообщений: 66

  • Автор темы
  • Репутация: 0
    • Награды
Garrett
Цитировать
А если встретится такая строка asdsad pq|owe. И всё приплыли.
Не понял, почему "приплыли"? Эта строка не будет удалена. Вроде как это и требуется :think:

Именно так и есть. И мне кажется реально достаточно $ ? lf;t ,tp ($|\R) . Ведь там где перевод строки, строка ,вроде как в любом случае, заканчивается ?
Или может быть что-то другое?

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3579
  • Репутация: 947
    • Награды
  • Версия AutoIt: 3.3.14.0
mitiya
Цитировать
мне кажется реально достаточно $
Если вас не будут смущать оставшиеся пустые строки, то достаточно.

Цитировать
там где перевод строки, строка ,вроде как в любом случае, заканчивается
Строка заканчивается, а перевод строки остаётся ;)

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3989
  • Репутация: 960
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI  [?]
Цитировать
Не понял, почему "приплыли"?
Потому, что лично для меня эта строка не несёт никакой информации. Следовательно она паразитная в отличие от других строк.
Это очередное если. Лично я не исключаю, что такое (если) может возникнуть в работе с лог файлом вопрошающего.
« Последнее редактирование: Август 16, 2017, 19:00:26 от Garrett »

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1201
  • Репутация: 169
  • Пол: Мужской
  • Windows7 (x64)
    • Награды
  • Версия AutoIt: 3.3.12.0
Есче вариантик на растерзание:
(нажмите для показа/скрытия)
 

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4041 Просмотров
Последний ответ Октябрь 27, 2010, 11:32:43
от axlwor
4 Ответов
7718 Просмотров
Последний ответ Июнь 13, 2010, 23:47:03
от aizi
1 Ответов
3700 Просмотров
Последний ответ Апрель 03, 2012, 11:41:00
от ShAG1992D
1 Ответов
3314 Просмотров
Последний ответ Июнь 09, 2012, 22:35:40
от AZJIO
8 Ответов
5123 Просмотров
Последний ответ Ноябрь 12, 2012, 13:07:29
от [email protected] Rasta
2 Ответов
1094 Просмотров
Последний ответ Май 08, 2014, 00:20:04
от xaker
2 Ответов
878 Просмотров
Последний ответ Октябрь 04, 2015, 18:53:49
от madmasles
2 Ответов
3310 Просмотров
Последний ответ Ноябрь 19, 2015, 13:03:04
от Danz0
3 Ответов
1162 Просмотров
Последний ответ Май 11, 2016, 16:18:36
от AZJIO
2 Ответов
213 Просмотров
Последний ответ Июль 31, 2017, 22:32:23
от palexa