Что нового

В строке удалить текст между начальным и конечным числом

Norm

Чайник
Сообщения
44
Репутация
1
Не получается вырезать ненужный участок из строк

Вот так выглядит текст:
Код:
Zentrale 1
  21; 4.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1
Überwachung: 10 kOhm Ruhe
  25; 3.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1
Überwachung: 10 kOhm Ruhe
  30; 2.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1
Überwachung: 10 kOhm Ruhe
  35; 1.UG Tiefgar AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1
Überwachung: 10 kOhm Ruhe
  36; 1.OG Leitstand AS Sprinkl Installationsort: esserbus-Modul 144 - Alarm. 4023/2
Überwachung: 10 kOhm Ruhe


Пытаюсь удалить всё что стоит перед первым и последним числами, что бы выглядело так: 21;4023/1
Но в идеале было бы ещё не лучше, если бы часть последующей строки присоединилась за предыдущей то есть так: 21;4023/1;10 kOhm Ruhe
С последующей строкой даже не начинал, постольку с первой никак не получается.
Пробовал только числа вычленить, но туда влезают и те которые нужно удалить
Код:
$sOut = StringRegExpReplace($sText[$i], "[^\d+; \d+/\d+]","")
 

Tempo

Скриптер
Сообщения
495
Репутация
145
Так?
Код:
;~ AutoIt Version: 3.3.14.5
Local $sText = "Zentrale 1" & @CRLF & _
        "  21; 4.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1" & @CRLF & _
        "Überwachung: 10 kOhm Ruhe" & @CRLF & _
        "  25; 3.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1" & @CRLF & _
        "Überwachung: 10 kOhm Ruhe" & @CRLF & _
        "  30; 2.UG AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1" & @CRLF & _
        "Überwachung: 10 kOhm Ruhe" & @CRLF & _
        "  35; 1.UG Tiefgar AS Sprinkler Installationsort: esserbus-Modul 144 - Alarm. 4023/1" & @CRLF & _
        "Überwachung: 10 kOhm Ruhe" & @CRLF & _
        "  36; 1.OG Leitstand AS Sprinkl Installationsort: esserbus-Modul 144 - Alarm. 4023/2" & @CRLF & _
        "Überwachung: 10 kOhm Ruhe"
Local $sOut = StringRegExpReplace($sText, "(?im)^\h+(\d+;).+?(\d+/\d+)\R.+?:\h+(\d+.+)", "\1\2;\3")
MsgBox(0, Default, $sOut)
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
Пробовал только числа вычленить, но туда влезают и те которые нужно удалить
Вы бы почитали документацию, и посмотрели примеры. Рекомендую сайт regex101.com. Вы там наглядно можете посмотреть как это работает.
А отвечая на Ваш вопрос. Квадратные скобки это группировка.
Код:
$sOut = StringRegExpReplace($sText[$i], "(\d+;)(.*?)(\d+/\d+)","$1$3")
 
Автор
N

Norm

Чайник
Сообщения
44
Репутация
1
Так?
Код:
Local $sOut = StringRegExpReplace($sText, "(?im)^\h+(\d+;).+?(\d+/\d+)\R.+?:\h+(\d+.+)", "\1\2;\3")
Конкретно на этом кусочке работает.
Я проверил весь файл, и там не всё так идеально.
Я этот текст хотел в два прохода почистить. Сначала выделял строки которые меня интересуют
Код:
$sOutput = StringRegExp($sTXT, "(.*?\d+/\d+|.*?Basiskarte|.*?Ruhe|Zentrale \d+)", 3)

Затем хотел дальше построково чистить
Проверил Ваш код после первой сортировки, обеденив строки снова через _ArraytoString , но там не все строки подверглись обработке.
Файл прицепил к сообщению.

Вы бы почитали документацию, и посмотрели примеры. Рекомендую сайт regex101.com. Вы там наглядно можете посмотреть как это работает.
А отвечая на Ваш вопрос. Квадратные скобки это группировка.
Код:
$sOut = StringRegExpReplace($sText[$i], "(\d+;)(.*?)(\d+/\d+)","$1$3")
Я даже книжку для этих выражений скачал 400 Стр. Но к сожалению, то что я делаю не может ждать пока я завершу изучение этого.
Хотя тема как я участвую очень и очень нужная.
Реально нет времени после работы и писать скрипты и изучать на бегу.

Ваш код построчно обрабатывает хорошо, буду думать, как всё это слепить
 

Вложения

Tempo

Скриптер
Сообщения
495
Репутация
145
Конкретно на этом кусочке работает.
Странно что вы посчитали что строки в файле аналогичны тем что вы выложили

Например, какая часть вам нужна из части в которой нет "\d+/\d+"
Код:
1006; 1.OG Flüre F-Gateway Installationsort: esserbus-Modul 123
Konfiguration: Störung speichernd; Standard; keine ÜE
Melderart: Koppler (Anzahl 4)
И тут уже 3 строки, какие части нужны из них?
 
  • Like
Реакции: Norm

eam

Чайник
Сообщения
8
Репутация
0
Если там 31 страница и надо быстро, я бы делал так: без RegExp все разбить на поля как в базе данных (т. е.
1006; Konfiguration: Melderart: и пр.) с помощью StringInStr и пр., например в массив и дальше обрабатывать элементы массива. RegExp это красиво, но трудно учесть все возможные варианты в таком большом и сложном тексте. Как вариант - сделать из текста файл .csv и сначала пройтись в Excel и убрать лишнее (хотя это и неправильно у нас, но если надо быстро...)
 
Автор
N

Norm

Чайник
Сообщения
44
Репутация
1
Странно что вы посчитали что строки в файле аналогичны тем что вы выложили

Например, какая часть вам нужна из части в которой нет "\d+/\d+"
Код:
1006; 1.OG Flüre F-Gateway Installationsort: esserbus-Modul 123
Konfiguration: Störung speichernd; Standard; keine ÜE
Melderart: Koppler (Anzahl 4)
И тут уже 3 строки, какие части нужны из них?
Поэтому я и решил сначала отделить те строки, которые мне нужны.
После первого прохода с помощью
Код:
$sOut = StringRegExpReplace($sText[$i], "[^\d+; \d+/\d+]","")
чётко отделяет нужное мне в массив. Правда там куча дубликатов Zentrale 1 , 2, 3 итд, а мне нужно только по одному от каждой. И вторую строку с 10 kR присоединить к первой. Так что придётся комбинировать с StginginStr
Если там 31 страница и надо быстро, я бы делал так: без RegExp все разбить на поля как в базе данных (т. е.
1006; Konfiguration: Melderart: и пр.) с помощью StringInStr и пр., например в массив и дальше обрабатывать элементы массива. RegExp это красиво, но трудно учесть все возможные варианты в таком большом и сложном тексте. Как вариант - сделать из текста файл .csv и сначала пройтись в Excel и убрать лишнее (хотя это и неправильно у нас, но если надо быстро...)
Буду комбинировать и то и это, должно получиться быстрее, чем только с StringinStr
 

Tempo

Скриптер
Сообщения
495
Репутация
145
Покажите что должно остаться в приложенном файле
 
  • Like
Реакции: Norm
Верх