Что нового

[RegExp] Выбрать весь текст до 2-х переносов строки

SET777

Новичок
Сообщения
51
Репутация
3
Всем привет!
Есть некий текст из которого нужно вытащить первый абзац (содержание текста смешанное цифры, символы). Структура и формат текста оригинала такие же:
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the
Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VBScript and SendKeys).


AutoIt is also very small, self-contained and will run on all versions of
Windows out-of-the-box with no annoying "runtimes"
required!
Эта конструкция вытаскивает только последнюю строчку абзаца(
Код:
#include <Array.au3>
$file = FileRead(@ScriptDir & '\message.txt')
$1 = StringRegExp($file,'(.*)\s\s\s',3)
_ArrayDisplay($1)
 

axlwor

Скриптер
Сообщения
657
Репутация
147
но наверно не вернет последнюю строку.
Вообще абзац это @CRLF, но есть куча TXT файлов, где каждая строчка так заканчивается

Код:
$a = StringRegExp($file,'(.*?)\s\s\s',3)
 
Автор
S

SET777

Новичок
Сообщения
51
Репутация
3
Возвращает точку с первого абзаца, кавычки со второго. :-\
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Или так :
Код:
$sPatern = "(?s)[\r\n]{4,}.+"
$sResult = StringRegExpReplace( $sText, $sPatern,'' )
MsgBox(4096, ' Test Result', $sResult)
 
Автор
S

SET777

Новичок
Сообщения
51
Репутация
3
gregaz
:laugh: спасибо! то что нужно. А функцией StringRegExp это как то можно реализовать? :scratch:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
SET777 [?]
спасибо! то что нужно. А функцией StringRegExp это как то можно реализовать?

Можно :
Код:
$sPatern = "(?s)(.+?[\r\n]{4,})"
$aResult = StringRegExp( $sText, $sPatern,1 )
_ArrayDisplay($aResult, ' Test Result ')
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
gregaz ;)

Код:
#include <Array.au3>

$sText = "Line 1" & @LF & @LF & "Line 2"
MsgBox(0, 'Text', $sText)

$sPatern = "(?s)(.+?[\r\n]{4,})"
$aResult = StringRegExp( $sText, $sPatern,1 )
_ArrayDisplay($aResult, ' Test Result ')
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
dwerf
Значит:
Код:
$sPatern = "(?s)(.+?[\r\n]{2,})"
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
gregaz
тогда отвалится
Код:
$sText = "Line 1" & @CRLF & "Line 2"
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Видимо корректнее :
Код:
$sPatern = "(?s)(.+?(?:\n|\r\n){2,})"
$aResult = StringRegExp( $sText, $sPatern,1 )
_ArrayDisplay($aResult, ' Test Result ')



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

Так для всех вариантов :
Код:
$sPatern = "(?s)(?:\r?\n){2,}.+"
$sResult = StringRegExpReplace( $sText, $sPatern, '' )
MsgBox(4096, ' Test Result', $sResult)

или:
Код:
$sPatern = "(?s)(.+?(?:\r?\n){2,})"
$aResult = StringRegExp( $sText, $sPatern,1 )
_ArrayDisplay($aResult, ' Test Result ')
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
более чем уверен, что у автора темы окончание строки виндовое, то есть crlf, так что не стоит заморачиваться всеми этими cr и lf по отдельности
 
Верх