Что нового

Регулярка которая найдет все строки в которых нет определенного символа

mitiya

Новичок
Сообщения
75
Репутация
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

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

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$text = StringRegExpReplace($text, "(?m)^[^|]*\R", "")
 

Nbv_tim

Новичок
Сообщения
47
Репутация
1
Код:
#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


так пойдет?
 
Автор
M

mitiya

Новичок
Сообщения
75
Репутация
0
InnI сказал(а):
Код:
$text = StringRegExpReplace($text, "(?m)^[^|]*\R", "")

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

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
Добавил.
Часто используемые выражения / шаблоны
Спасибо InnI.



Добавлено:
Сообщение автоматически объединено:

mitiya [?]
а то последнюю строку не обрабатывает ибо у нее в конце нет перевода строки
Обрабатывает всё, в том числе и последнюю строку без перевода строи в конце.
 
Автор
M

mitiya

Новичок
Сообщения
75
Репутация
0
UB0T1YD.png


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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
mitiya
Конкретно к вашей задачи из первого поста всё отлично работает!
Поэтому не надо говорить - mitiya [?]
а то последнюю строку не обрабатывает ибо у нее в конце нет перевода строки.
Если у вас возникла проблема с шаблоном, опишите её или изначально описывайте задачу более точно.



Добавлено:
Сообщение автоматически объединено:

Вот вариант для массива.
Код:
#include<Array.au3>

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

Конкретно к двум вашим вариантам задач подходит.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
mitiya
последнюю строку не обрабатывает ибо у нее в конце нет перевода строки
Код:
"(?m)^[^|]*($|\R)"

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

mitiya

Новичок
Сообщения
75
Репутация
0
Поэтому не надо говорить

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
mitiya [?]
И говорю я что только то что \R не обрабатывает конец строки и только. А вы мне что мол обрабатывает.

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

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

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

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


Добавлено:
Сообщение автоматически объединено:

mitiya [?]
Более того, я автору комментария и плюс поставил
Мне самому вариант от InnI понравился! Хорошее решение!
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Garrett
А если встретится такая строка asdsad pq|owe. И всё приплыли.
Не понял, почему "приплыли"? Эта строка не будет удалена. Вроде как это и требуется :scratch:
 
Автор
M

mitiya

Новичок
Сообщения
75
Репутация
0
InnI сказал(а):
Garrett
А если встретится такая строка asdsad pq|owe. И всё приплыли.
Не понял, почему "приплыли"? Эта строка не будет удалена. Вроде как это и требуется :scratch:

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

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
mitiya
мне кажется реально достаточно $
Если вас не будут смущать оставшиеся пустые строки, то достаточно.

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
InnI [?]
Не понял, почему "приплыли"?
Потому, что лично для меня эта строка не несёт никакой информации. Следовательно она паразитная в отличие от других строк.
Это очередное если. Лично я не исключаю, что такое (если) может возникнуть в работе с лог файлом вопрошающего.
 
A

Alofa

Гость
Есче вариантик на растерзание:
Код:
$sTextDefault =  @CR & @CRLF & @LF & @CRLF & _
		'(1) hg fsghjdgsh ghj.' & @CRLF & _
		'(2) hg fsghjdgsh ghj.' & @CRLF & _
		'pip|1.1.1||false' & @CRLF & _
		'pip|2.2.2|2.2.2|false|true|' & @CRLF & @CRLF & _
		'(3) hg fsghjdgsh ghj.' & @CRLF & _
		'python3|3.3.3|false' & @CRLF & _
		'(4) hg fsghjdgsh ghj.' & @CRLF & @CRLF

$sText = StringRegExpReplace($sTextDefault, '(?m)\A\R*|(?(?=\R)[^|]*$|^[^|]*\R)', '')
ConsoleWrite('{' & $sText & '}' & @LF) ; <<<<<<<<<<<<<<<<<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>>>>>>>>>>>>>>>
 
Верх