Страницы: 1
RSS
С помощью регулярных выражений убрать значения в скобках, но оставить исключения
 
Мне необходимо из записи в ячейке excel удалить значения в круглых скобках, для этого я использую regex и выражение: \(.*?\) . Однако, мне необходимо чтобы некоторые значения в скобках все же оставались, их список "НГП, нгп, ЧГП, чгп, все пути". Как оформить список исключений в выражении?
 
а это "НГП, нгп, ЧГП, чгп, все пути"
там может быть в любых комбинациях или только что-то одно?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
а это "НГП, нгп, ЧГП, чгп, все пути"
там может быть в любых комбинациях или только что-то одно?
Может быть в нескольких комбинациях, к примеру

СОХАТЫЙ
; об. - (все пути)
ВИДИМ - СОХАТЫЙ
путь 1 (IIЧ-НII)
ВИДИМ
; об. - (НГП)
 
хорошо
что должно остаться?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
хорошо
что должно остаться?
Уйти должно (IIЧ-НII), но там разные варианты могут быть написаны, а остается (все пути) и (НГП)
 
Станислав Мерц, Файл с примером приложите
 
Цитата
написал:
Станислав Мерц, Файл с примером приложите
 
Попробуйте так:
Код
Public Function zamena(Strka As String, Pat As String)
Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Global = True
        .IgnoreCase = True
        .MultiLine = True
        .Pattern = Pat
    End With
    zamena = regex.Replace(Strka, "")
End Function


К сожалению в примере нет списка который нужно оставить, сделал на ячейке где больше всего скобок. Pattern такой "\((?!44-57|30-65).+\)" останутся только 44-57 и 30-65
Изменено: Msi2102 - 29.09.2022 20:31:45
 
Msi2102, почти. По вашему образцу подправил как нужно было, получилось:   \((?!НГП|ЧГП|нгп|чгп|не задано|все пути).+\)
Спасибо большое!
 
Код
Sub DelInBracket()
  Dim c As Range, cnt&, r&, re
  Set re = CreateObject("VBScript.RegExp")
  re.Global = True: re.IgnoreCase = True: re.MultiLine = True
  re.Pattern = "\((?!нгп|чгп|все пути).+\)"
  For Each c In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
    If re.test(c.Value) Then cnt = cnt + 1: c = re.Replace(c.Value, "")
  Next
  MsgBox cnt & " cells changed"
End Sub
Изменено: Ігор Гончаренко - 29.09.2022 22:36:59
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх