Что нового

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

Norm

Продвинутый
Сообщения
278
Репутация
74
Не получается вырезать ненужный участок из строк

Вот так выглядит текст:
Код:
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

AutoIT Гуру
Сообщения
616
Репутация
205
Так?
Код:
;~ 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,590
Репутация
341
Пробовал только числа вычленить, но туда влезают и те которые нужно удалить
Вы бы почитали документацию, и посмотрели примеры. Рекомендую сайт regex101.com. Вы там наглядно можете посмотреть как это работает.
А отвечая на Ваш вопрос. Квадратные скобки это группировка.
Код:
$sOut = StringRegExpReplace($sText[$i], "(\d+;)(.*?)(\d+/\d+)","$1$3")
 
Автор
N

Norm

Продвинутый
Сообщения
278
Репутация
74
Так?
Код:
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 Стр. Но к сожалению, то что я делаю не может ждать пока я завершу изучение этого.
Хотя тема как я участвую очень и очень нужная.
Реально нет времени после работы и писать скрипты и изучать на бегу.

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

Вложения

  • Alles.txt
    21.6 КБ · Просмотры: 2

Tempo

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

Например, какая часть вам нужна из части в которой нет "\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
Репутация
1
Если там 31 страница и надо быстро, я бы делал так: без RegExp все разбить на поля как в базе данных (т. е.
1006; Konfiguration: Melderart: и пр.) с помощью StringInStr и пр., например в массив и дальше обрабатывать элементы массива. RegExp это красиво, но трудно учесть все возможные варианты в таком большом и сложном тексте. Как вариант - сделать из текста файл .csv и сначала пройтись в Excel и убрать лишнее (хотя это и неправильно у нас, но если надо быстро...)
 
Автор
N

Norm

Продвинутый
Сообщения
278
Репутация
74
Странно что вы посчитали что строки в файле аналогичны тем что вы выложили

Например, какая часть вам нужна из части в которой нет "\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

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