Что нового

[Данные, строки] Выборка данных

Tapok

Новичок
Сообщения
204
Репутация
0
Как с помощью рег. выр. заменить
Код:
Илл. 5. Введение.png
Илл. 5.1. Один.png
Илл. 9.1.0. Два.png
Илл. 9.1.10. Три.png
Илл. 12.12.100. Четыре.png
на
Код:
5
Введение
5.1
Один
9.1.0
Два
9.1.10
Три
12.12.100
Четыре
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Код:
$t= 'Илл. 12.12.100. Четыре.png'
$arr_t001 = StringRegExp($t, '(?si) (.*?)\. ',1)
$arr_t002 = StringRegExp($t, '(?si).*? .*? (.*?)\.',1)
ConsoleWrite($arr_t001[0] & @CRLF&$arr_t002[0]& @CRLF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Tapok,
Можно и так.
Код:
#include <Array.au3>

$sTxt = FileRead(@ScriptDir & '\1.txt')
$aRes = StringRegExp($sTxt, '(\d+(?:\.\d+)*)\.\h+([ЁёА-Яа-я]+)\.', 3)
_ArrayDisplay($aRes)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Мой вариант:

Код:
$vTest = _
	'Илл. 5. Введение.png' & @CRLF & _
	'Илл. 5.1. Один.png' & @CRLF & _
	'Илл. 9.1.0. Два.png' & @CRLF & _
	'Илл. 9.1.10. Три.png' & @CRLF & _
	'Илл. 12.12.100. Четыре.png'
 
$sRet = StringRegExpReplace($vTest, '(?si)Илл\. ((?:\d+\.)*)(\d+)\.? (.*?)\.png', '\1\2' & @CRLF & '\3')
ConsoleWrite($sRet & @LF)
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не успел немного. :smile:
Мне было интересно вставить перевод строки в результат.
Так что просто до кучи
Код:
$text = "Илл. 5. Введение.png" & @CRLF & _
        "Илл. 5.1. Один.png" & @CRLF & _
		"Илл. 9.1.0. Два.png" & @CRLF & _
		"Илл. 9.1.10. Три.png" & @CRLF & _
		"Илл. 12.12.100. Четыре.png"

$pattern = "(?smi)^.*? (.*?)\. (.*?)\.png"
$res = StringRegExpReplace($text, $pattern, "$1"&@CRLF&"$2")
MsgBox(0,"",$res)
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Большая просьба чуть исправить код, чтобы обрабатывал строки вида
Код:
Илл.9.1.46_1 Окончание стрельбы.png

Плюс поправка к первоначальной постановке задачи :-\ Выглядит все так:
Код:
Илл.5 Введение.png
Илл.5.1 Один.png
Илл.9.1.0 Два.png
Илл.9.1.10 Три.png
Илл.12.12.100 Четыре.png
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Если вы приведёте свой текст к определёной структуре:
Между Илл. и 9. поставите пробел
После _1 поставите "."
То скрипт от C2H5OH прекрасно справится с вашей задачей.
Tapok сказал(а):
Плюс поправка к первоначальной постановке задачи :-\ Выглядит все так:
Однако, батенька. Да вы сами не знаете чего вам надо ;D

Переделал pattern от C2H5OH
Код:
$pattern = "(?smi)^.*?\.(.*?) (.*?)\.png"
Пробуйте
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
работает, и чтобы
Код:
Илл.9.1.46_1 Окончание стрельбы.png
видело тоже, дополните пожалуйста
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
У меня всё видит. Может опять чего-то не правильно написали?
 

Вложения

  • pattern.JPG
    pattern.JPG
    8.3 КБ · Просмотры: 7

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Tapok
Подчёркивание будет только перед последней цифрой?

Впрочем неважно:

Код:
$vTest = _
    'Илл.5. Введение.png' & @CRLF & _
    'Илл. 5_1. Один.png' & @CRLF & _
    'Илл. 9.1.0. Два.png' & @CRLF & _
    'Илл. 9.1.10.Три.png' & @CRLF & _
    'Илл. 12.12.100. Чет ыре.png'
 
$sRet = StringRegExpReplace($vTest, '(?si)Илл\.\h*([\d\._]*\d+)[\._]?\h*(.*?)\.png', '\1' & @CRLF & '\2')
ConsoleWrite($sRet & @LF)
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
edyapd сказал(а):
У меня всё видит. Может опять чего-то не правильно написали?
Да, сглючил я...
Код:
"Илл.9.1.10_1 ...
Код не добавил, а результата хотел... :smile:
Спасибо большое!
 
Верх