Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 20.01.2023
Сообщений: 34

Найти строку после строки с regex

20.11.2024, 12:12. Показов 2242. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я генерирую вводные части (шапки) писем определённым немецким софтом для адвокатов, не имеющим программных интерфейсов. Пример документа приложен к этому посту. Мне нужно получать из таких документов через Word/COM номер дела (в коде далее $Az), фамилию доверителя и противника ($Gegner), чтобы дальше использовать в генерируемом через PowerShell/COM теле документа.

Вот что попробовал:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Rubrumauslese.ps1
 
$wordApp = [Runtime.Interopservices.Marshal]::GetActiveObject('Word.Application')
$doc = $wordApp.ActiveDocument
$documentText = $doc.Content.Text
 
$documentText | Set-Clipboard # debug
 
$Zeilen = $documentText -split "`r`n" # массив из строк документа
 
$Mandantin = [regex]::match($documentText, '(?m)(^\S.*)(?=\s\./\.)').Value
$Gegner = [regex]::match($documentText, '(?<=\./\.\s).*?(?=\s|$)').Value
 
#Az
for ($i = 0; $i -lt $Zeilen.Length; $i++) {
    if ($Zeilen[$i] -match 'AKTEN\.NR:\s*(.*)') {
        # get the next line
        $AzZeile = $Zeilen[$i + 1]
        $AzZeile # debug
        # Regex für Az
        if ($AzZeile -match '^\d+/\d+') {
            $Az = $matches[0]
        }
    }
}
 
Write-Output "$Mandant"
Write-Output "./."
Write-Output "$Gegner"
Write-Output "$Az"
 
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wordApp) | Out-Null
$documentText приобретает на приложенном примерном документе такое содержимое:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Frau
Anna Mustermanowa
Hauptstr. 1
48996 Ministadt
 
per beA
per Mail: anna.mustermanowa@example.com
 
AKTEN.NR:   SACHBEARBEITER/SEKRETARIAT  STÄDTL,
2904/24/SB  Sonja Bearbeinenko  +49 211 123456.00   20.11.2024
    Telefax:    +49 211 123190.00
    E-Mail: anwalt@ra.example.com
 
Superman ./. Mustermanowa
Worum es da so geht
 
 
Sehr geehrte Frau Mustermanowa,
Единственное что пока правильно мэтчится это $Gegner.

Чтобы наполнить $Az я вначале пробую замэтчить строку, содержащую
Code
1
AKTEN.NR:
и далее получить в $AzZeile следующую строку.

Однако, $AzZeile остаётся пустой.
Вложения
Тип файла: docx testRubrum0.docx (22.4 Кб, 12 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2024, 12:12
Ответы с готовыми решениями:

Найти количество вхождений строки в строку используя regex
Для обычной заданной строки имеется вот такой код: #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char* string =...

Regex IsMatch поиск в начале строки после \n
Нужна помощь.... По задумке, этот код должен искать текст &quot;text2&quot;. Символ &quot;^&quot; означает, что нужно искать или в начале всего текста или в...

Regex и скобки. Не получается найти строку со скобками
Добрый день, прошу помощи. Не получается найти строку со скобками. using System; using System.Collections.Generic; using System.Linq;...

24
1659 / 274 / 66
Регистрация: 03.06.2020
Сообщений: 707
22.11.2024, 17:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от eugrus Посмотреть сообщение
Как дальше подготовить такую $data
Зачем вам делать лишний Get-Content?

Цитата Сообщение от eugrus Посмотреть сообщение
Файл из примера выше
Точно так же, как в примере выше:
Миниатюры
Найти строку после строки с regex  
0
2 / 2 / 0
Регистрация: 20.01.2023
Сообщений: 34
22.11.2024, 18:00  [ТС]
Цитата Сообщение от lesser Посмотреть сообщение
Зачем вам делать лишний Get-Content?
Чтобы продемонстировать вам, какая проблема возникает при работе Select-String с переменной, а не файлом. В реальном коде эта переменная заполняется через Content.Text от ActiveDocument из Word.Application (см. изначальное сообщение в теме).

Цитата Сообщение от lesser Посмотреть сообщение
Точно так же, как в примере выше
Как видно из моего предыдущего сообщения, всё оказывается запихано в .Line (и это после -split "`n"), соответственно PostContext пустой.
0
1659 / 274 / 66
Регистрация: 03.06.2020
Сообщений: 707
22.11.2024, 18:51
Ну и пустите эту переменную через пайп:

PowerShell
1
2
3
4
$data = Get-Content debug.txt
$result = $data | Select-String 'AKTEN' -Context 3
$result.Line
$result.Context.PostContext
На счет InputObject, то там какая-то фигня с дисериализацией объекта. Если не ошибаюсь в терминах. Когда-то об этом читал, но уже не вспомню.

Добавлено через 15 минут
Из справки:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS > Get-Help Select-String -Parameter InputObject
 
-InputObject <System.Management.Automation.PSObject>
    Specifies the text to be searched. Enter a variable that contains the text, or type a command or expression that gets the text.
    
    Using the InputObject parameter isn't the same as sending strings down the pipeline to `Select-String`.
    
    When you pipe more than one string to the `Select-String` cmdlet, it searches for the specified text in each string and returns each string that contains the search text.
    
    When you use the InputObject parameter to submit a collection of strings, `Select-String` treats the collection as a single combined string. `Select-String` returns the strings as a unit if it finds the search text in any string. FileInfo objects are treated as a path to a file. When file paths are specified, `Select-String` searches the contents of the file, not the `ToString()` representation of the object.
    
    Required?                    true
    Position?                    named
    Default value                None
    Accept pipeline input?       True (ByValue)
    Aliases                      none
    Accept wildcard characters?  false
0
Нарушитель
7166 / 2335 / 353
Регистрация: 10.12.2013
Сообщений: 8,079
23.11.2024, 20:32
глянул чисто из любопытства

PowerShell
1
2
3
4
5
6
7
8
9
10
class zhoppa {
     [string]$zhoppa1="aaaaaaaaaaaaa"
     [string]$zhoppa2="bbbbbbbbbbbbb"
     [string]$zhoppa3="ccccccccc"
}
 
 
$data = [zhoppa]::new();
 
sls zhopp -input $data
ну что, нашёл. по имени вычислил, гад. По имени класса. но не по свойствам.


а если не класс, а [pscustomobject], ищет и по имени property, и по значению property

Добавлено через 3 минуты
зачем это может понадобиться в мирных целях, не знаю.
0
2 / 2 / 0
Регистрация: 20.01.2023
Сообщений: 34
25.11.2024, 12:21  [ТС]
А вот и решение: https://www.reddit.com/r/Power... t/ly9ylmw/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2024, 12:21

Найти все слова или строки в Regex
День добрый! Никак не могу составить Regex pattern, который мог бы разбить текст на отдельные слова, либо наборы слов, но в кавычках....

RegEx: найти все слова WHERE, после которых не следует слово AS
Нужна помощь в написании регулярного выражения, которое бы находило все слова WHERE, после которых на любом удалении вперед НЕ следует...

Строки. Перед (после) каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить строку S2 Есть такой код using...

Дан символ С и строки S, So. После каждого вхождения символа С в строку S вставить строку So
Дан символ С и строки S, So. После каждого вхождения символа С в строку S вставить строку So

Даны строки S1, S2 и символ С. Вставить в строку S1 после каждого вхождения символа С строку S2
Помогите,пожалуйста, написать программу. Исходные данные вводятся с использованием функции prompt. Результат выводить в окне браузера. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru