Использовать регулярное выражение для поиска и замены числа после слова?
Привет! Я очень новичок в регулярных выражениях и уже несколько часов тестирую их, чтобы найти подходящее выражение? Я работаю в компании VB.NET язык, VS2015, Windows Forms, Win10.
Я действительно нашел регулярное выражение, которое, по-видимому, работает для того, что мне нужно на нескольких сайтах тестирования регулярных выражений (т. е. независимо извлекает значения picwgoal и pichgoal). Но, кажется, это не принято в моем проекте? Intellisense обвиняет что то свое ? нельзя использовать здесь? Затем \b отделяется таким образом, \ b... Я предполагаю, что либо вкус регулярного выражения не является правильным для VB.NET или я просто не знаю, как использовать это выражение?
Я работаю над решением, которое преобразует содержимое RTF в RichTextBox в код разметки RTF в отдельном RTB. Он также преобразует разметку RTF для отображения исходного документа RTF.
Моя цель состоит в том, чтобы извлечь оба значения picwgoal и pichgoal из приведенной ниже тестовой строки для отображения на 2 отдельных метках. Затем, используя числовое значение вверх/вниз, измените размер этих значений на процент, чтобы уменьшить изображение до нужного размера. Затем мне нужно заменить исходные значения picwgoal и pichgoal новыми значениями (т. е. в твипах), чтобы изменить размер/масштаб изображения до требуемого размера. Это работает вручную, но я хотел бы автоматизировать эту задачу!
Я попытался использовать регулярное выражение.Сопоставьте примеры, но проблема, похоже, заключается в самом регулярном выражении? То, что я думаю, что мне нужно сделать, но не знаю, как это сделать, это:
- Поиск picwgoal.
- Извлеките числовое значение (т. е. переменную), которое следует за ним.
- Масштабируйте значение вниз в соответствии с процентом ввода пользователем (т. е. используя числовое значение вверх/вниз).
- Замените исходное значение в разметке RTF новым уменьшенным значением.
- Повторите операцию для pichgoal (может быть, оба значения можно заменить в одной операции???).
Тестовая строка представляет собой частичную выдержку из кода разметки RTF для изображения и текста!
Если вы можете дать мне какие-либо указания или помочь в этом, я был бы очень признателен! Я планирую опубликовать решение, как только преодолею препятствия :-)
Спасибо!!!
Что я уже пробовал:
' Step 1: create Regex. Dim regex As Regex = New Regex("\d+") Step 2: call Match on Regex. Dim match As Match = regex.Match(?:picwgoal)(\d+) ' Step 3: test the Success bool. ' ... If we have Success, write the Value. If match.Success Then Console.WriteLine(match.Value) End If
REGEX EXPRESSION: (?:picwgoal)(\d+)
TEST STRING: {\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}\viewkind4\uc1\pard\f0\fs17{\pict\wmetafile8\picw20793\pich13968\picwgoal11788\pichgoal7919 010009000003f88109000000e28109000000050000000b0200000000050000000c0290363951e2
Member 13032047
Я экспериментирую с группами захвата, то есть "(picwgoal)(\d+)", которая правильно делит текст и числовое значение на две группы. Пара вопросов: 1. Это работает в VB.NET? 2. Как я могу извлечь вторую группу захвата (т. е. числовое значение)? Тексты picwgoal и pichgoal являются константами, но числовые значения, которые следуют за ними, изменяются в соответствии с изображением, из которого генерируется RTF-код! Поэтому я не могу использовать сравнительную строку? Мне нужно найти текст picwgoal и pichgoal в разметке RTF, а затем заменить следующее числовое значение новым числовым значением? Действительно был бы признателен за любую помощь в этом!!!
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Member 13032047
Нашел способ игнорировать первую группу захвата, сделав вторую группу захвата группой 1 (https://regex101.com/). Итак, теперь вместо того, чтобы перечислять две группы в результатах, есть только одна группа (то есть числовое значение, которое я хочу). Выглядит хорошо, но все еще не знаете, как использовать это в коде???
Patrice T
А как насчет того, чтобы показать свой код ?
Member 13032047
Спасибо, Патрис! Я обновил код, показав один пример из нескольких, которые я пробовал. Я новичок в регулярном выражении и делаю всю работу, чтобы попытаться научиться! Однако люди в основном публикуют только регулярное выражение, которое они тестировали на тестерах регулярных выражений, не приводя пример использования этого выражения в реальном коде! Это делает его довольно трудным для изучения! Тестеры регулярных выражений тестируют выражения, но на самом деле не показывают никаких примеров кода. Например, выражение, которое я теперь поместил в код, работает на нескольких тестерах регулярных выражений, но как я могу заставить его работать в реальном коде???