2014-02-01 3 views
-1

Я вот уже несколько часов копаюсь здесь, включая все возможные дубликаты, помеченные этим сообщением. У меня абсолютно нет нигде.Regex - замена строки между круглыми скобками

Я просто пытаюсь заменить строку в имени файла в скобках, т.е.

2014 01 26 0000 CFR (Float).DAT должен вернуть 2014 01 26 0000 CFR (Tagname).DAT

и

2014 01 26 0000 CFR (String).DAT должен также вернуть 2014 01 26 0000 CFR (Tagname).DAT

As за this вопрос, использую:

Dim r As New Regex("\(.*\)") 
Dim result As String = r.Replace(logfilename, "Tagname") 

Но это возвращает 2014 01 26 0000 CFR Tagname.DAT - Мне нужно сохранить круглые скобки.

Я понимаю, что я мог бы использовать это и просто сделать:

Dim result As String = r.Replace(logfilename, "(Tagname)") 

, но это не главное.

Regex (очевидно) не моя сильная сторона.

Update:

После sln поставить неизбежные семена сомнения в моей голове, я, наконец, пошел с этим:

Dim tagfilename As String = "" 
If Regex.Match(logfilename, "\(Float\)\.").Success Then 
    tagfilename = Regex.Replace(logfilename, "\(Float\)\.", "(Tagname).") 
End If 
If Regex.Match(logfilename, "\(String\)\.").Success Then 
    tagfilename = Regex.Replace(logfilename, "\(String\)\.", "(Tagname).") 
End If 
+0

На самом деле, что является хорошим решением, независимо от того, какой «точки» вы говорите. –

+0

@aleph_null: Это только я - я просто подумал, что это немного глупо, снимая круглые скобки, только чтобы добавить их снова после. Тем не менее, все работает! –

+1

Вероятно, следует использовать '\ ([^()] * \)' в качестве замены регулярное выражение '(Tagnamee)'. Обозначая '. *', Вы можете сопоставить другие '()' 's в строке. – sln

ответ

2

Просто используйте то, что у вас есть Dim result As String = r.Replace(logfilename, "(Tagname)").

Вы можете использовать смотреть вперед и смотреть-сзади, но это излишне делает регулярное выражение осложненным:

Dim r As New Regex("(?<=\().*(?=\))") 
+0

Я пойду с быстрым «грязным», тогда нет смысла излишне усложнять вещи. Спасибо за совет. –

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