Member 10058701 Ответов: 2

Vb.net: регулярное выражение найти и заменить


Здравствуйте, Эксперты !
я делаю случай, когда пользователь может создать пользовательскую формулу, выбрав несколько строк,

Теперь, когда пользователь сохраняет формулу, она находится в таком виде

Цитата:
(AL01-RM)+(AL03-RM)+20,0


внутри скобок строки - это некоторые идентификаторы элементов (которые находятся в столбце datagridview),
теперь сценарий таков,

1-он получает приведенную выше строку,
2-найти строку внутри скобок () в столбце datagridview по шаблону регулярных выражений "(?<=\().*?(?=\))")
3-если строка внутри скобок () совпадает со значением столбца 1 datagridview,
4-теперь получите значение из столбца datagridview 2 (это значение строки)
5-теперь замените значение в первой входной строке внутри скобок (), и вот я застрял,
я хочу, чтобы строки, как это
"(10)+(30)+20"

но я получаю такую строку
"(10 ) +(AL03-RM)+20.0(AL01-RM)+(30)+20.0"

я пробовал разные вещи, но не могу выйти, как положено.
"(10)+(30)+20"
Пожалуйста, смотрите изображение для получения более подробной информации

Все хорошо: изображение Ссылка для подробностей[^]

Пожалуйста, помогите мне решить эту проблему.

Что я уже пробовал:

Частная суб SimpleButton2_Click(отправителя как объект, а равно EventArgs) обрабатывает SimpleButton2.Нажмите

Для i As Integer = 0 To dgv. Rows.Количество-1

'Dim paren как новое регулярное выражение ("\([^)]*\)")
'Dim paren как новое регулярное выражение ("\((.*?)\)")
Dim paren как новое регулярное выражение("(?<=\().*?(?=\))")
Команда Dim в виде строки = "((AL01-RM)+(AL03-RM))+20.0"

Тусклые спички как MatchCollection
спички = парен.Совпадения(команда)

Тусклый м как спичка
Для каждого m в матчах

Если M.Метод toString = dgv.Ряды(я).Ячейки (1). Значение Тогда
RTB2.AppendText(Регулярное Выражение.Заменить(команда, м.Метод toString, dgv.Ряды(я).Клетки(2).Значение.Метод toString))

Конец, Если
Следующий

Следующий

Конец Подводной Лодки

2 Ответов

Рейтинг:
4

RickZeeland

Что-то вроде этого:

Dim paren As String = "\([^)]*\)"
Dim command As String = "(AL01-RM)+(AL03-RM)+20.0"
Dim matches As MatchCollection = Regex.Matches(command, paren)
		
For Each m In matches
Dim temp As String = "match = " + m.ToString()
Console.WriteLine(temp)
command = command.Replace(m.ToString(), "(xx)")
Next
	
Console.WriteLine(command)


Member 10058701

Спасибо за ваш ценный ответ, наконец-то это решилось с незначительными изменениями с вашей идеей:

Dim paren As String = "(?<=\().*?(?=\))"
Команда Dim в виде строки = "(AL01-RM)+(AL03-RM)+20.0"
Dim соответствует как MatchCollection = Regex.Спички (команда, парен)

Для каждого m в матчах

Для i As Integer = 0 To dgv. Rows.Количество-1

Если M.Метод toString = dgv.Ряды(я).Ячейки (1). Значение Тогда

Dim temp As String = Trim(dgv. Rows (i).Ячейки (2). Значение)
команда = команда.Replace (m. ToString (), temp)


Конец, Если

Следующий

Следующий

RTB2.Текст = (команда)

Рейтинг:
1

Patrice T

Прежде всего попытайтесь составить свое мнение о языке: это C# или VB, а не оба, из кода это VB.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя-отладчик. Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Visual Basic / Visual Studio Video Tutorial-Базовая Отладка-YouTube[^]
Visual Basic .NET programming for Beginners - точки останова и инструменты отладки[^]

Отладка кода C# в Visual Studio-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 10058701

Спасибо за ваш ценный пост, я пойду на это.