2017-02-22 22 views
2

у меня есть некоторые макросы VBA, и мне нужно, чтобы перевести все выходные сообщения, но эти сообщения заключены в двойные кавычки, например:Unix, как извлечь значения в двойные кавычки

If Not IsNumeric(Sheet28.Range("I9")) Then 
    Call MsgBox("Error! Voucher expiry years must be a number", vbDefaultButton1 Or vbExclamation, "Error!") 
    Application.Undo 
End If 

И я хочу это :

"I9" 
"Error! Voucher expiry years must be a number" 
"Error!" 

Можно ли это сделать с помощью grep, sed, awk, regex или еще чего-нибудь?

«I9» не является сообщение, но я позабочусь об удалении текстов, которые не являются сообщениями, удаление дубликатов и т.д.

Спасибо заранее!

+0

Попробуйте регулярки запроса я не использую другие достаточно, извините – Giovanni

+0

Это немного сложнее, чем - VBA ускользает от '" 'внутри строки с' «'. – Comintern

+0

@noreason - Спасибо, я постараюсь с помощью «(. *?)» –

ответ

0

Вы, вероятно, хотите шаблон, такие как:

"[^"]+"    # matches I9 also 
"[^)I"]+"   # won't match messages starting with "I" 
"[^"]+?"   # lazy match in case you aren't using grep, egrep, etc. 
"[^"][^0-9(]+"  # won't match messages with the second character as digit. 

Использование grep или egrep:

grep -Eo '"[^"]+"' 
egrep -o '"[^"]+"' 

матч бы "I9", "Error!", "Error! Voucher expiry years must be a number "

grep -Eo '"[^"][^0-9(]+"' 

Матчи "Error!", "Error! Voucher expiry years must be a number", "I match also"

  • " соответствует символу " буквально (чувствительно к регистру)
  • Матча один символ не присутствует в [^I)"]
  • +? квантора - Матчи между одним и неограниченным количеством раз, а несколько раз, как это возможно , расширение по мере необходимости (ленив)

Пример: «(. *)»:

https://regex101.com/r/z2eSQF/2

+0

afaik, ERE не поддерживает не-жадные ... но здесь не нужны ... – Sundeep

+1

также, используя'^I', может работать для заданного ввода образца, но что если что-то вроде 'In' является частью сообщения? OP упоминает фильтрацию после получения двойных кавычек, поэтому простой файл 'grep -oE '[^"] + "' должен быть достаточным – Sundeep

+0

@Sundeep: Если OP не использует grep, может оказаться полезным не-жадный квантификатор, и не будет влиять на grep в любом случае, так что это там, если нужно, я уже упомянул часть '^ I' в последнем предложении моего ответа, поэтому просто удалить его. Спасибо за комментарии ! –

Смежные вопросы