RegEx and Vb.net /// "Unrecognized escape sequence"

S

sloan

I have a fairly simple RegEx code below.

I am given a file name, (which I don't control) , and need to change a
folder name in it.



The code below is choking on the filename not being escaped.

"Unrecognized escape sequence"

While I can escape the findValue and replaceValue,
I don't necessarily control the fileName value. Aka, all I can do is
manually string.Replace the fileName value. (Unless someone knows better
than I)

Do I have to do a string.Replace here? ( to make all the \ into \\ )

Or am I missing some trick in vb.net.



----------Start VB.Net code



Dim fileName As String

fileName = "C:\wutemp\myfile.txt" '<< this is given to me, I cannot simply
say " filename = "C:\\wutemp\\myfile.txt" "

Dim replaceRegEx As System.Text.RegularExpressions.Regex = New
System.Text.RegularExpressions.Regex(fileName, getRegexOptions())

Dim findValue As String = "\wutemp\"

Dim replaceValue As String = "\newfolder\"

Dim newFileName As String = replaceRegEx.Replace(fileName, findValue,
replaceValue)







Private Function GetRegexOptions() As RegexOptions



Dim options As RegexOptions = New RegexOptions

options = options Or RegexOptions.IgnoreCase

Return options

End Function




PS
This is a repost. But I marked the other post (in .language.vb) as "IGNORE
do not reply here".

...
 
D

dunawayc

I have a fairly simple RegEx code below.

I am given a file name, (which I don't control) , and need to change a
folder name in it.

The code below is choking on the filename not being escaped.

"Unrecognized escape sequence"

While I can escape the findValue and replaceValue,
I don't necessarily control the fileName value. Aka, all I can do is
manually string.Replace the fileName value. (Unless someone knows better
than I)

Do I have to do a string.Replace here? ( to make all the \ into \\ )

Or am I missing some trick in vb.net.

----------Start VB.Net code

Dim fileName As String

fileName = "C:\wutemp\myfile.txt" '<< this is given to me, I cannot simply
say " filename = "C:\\wutemp\\myfile.txt" "

Dim replaceRegEx As System.Text.RegularExpressions.Regex = New
System.Text.RegularExpressions.Regex(fileName, getRegexOptions())

Dim findValue As String = "\wutemp\"

Dim replaceValue As String = "\newfolder\"

Dim newFileName As String = replaceRegEx.Replace(fileName, findValue,
replaceValue)

Private Function GetRegexOptions() As RegexOptions

Dim options As RegexOptions = New RegexOptions

options = options Or RegexOptions.IgnoreCase

Return options

End Function

PS
This is a repost. But I marked the other post (in .language.vb) as "IGNORE
do not reply here".

..


Why not just use the Path class in the System.IO namespace?

string filename = @"c:\wutemp\myfile.txt";
string replaceValue = @"c:\newfolder";
string newFileName = Path.Combine(replaceValue,
Path.GetFileName(filename));

Chris
 
S

sloan

//quote
I'm not sure why you're using double slashes in your path names as
VB.Net does not use the \ character as an escape character in strings.
// end quote

That's the issue. I *don't want* to use the double slashed, and wouldn't
think (since I'm in vb.net on this one , and not c# ) I'd have to use
delimited characters.
But the code breaks .... if I use single slashes.


//quote
Dim filename As String = "c:\wutemp\myfile.txt"
Dim replaceValue As String = "c:\newFolder"
Dim newFilename As String = Path.Combine(replaceValue,
Path.GetFileName(filename))
//end quote


That would be an option, but I actually have more complex rules, that RegEx
solves perfectly.
I just used the "change folder name" as a dumbed down example.



I did all this at home in C# , and had it working. I brought it into work
and this project was vb.net , and I converted the code.
 
S

sloan

//and note
that \ is the escape characters for regular expressions regardless of the
"host language".//

Ahhh....
Thus my error in my C# to VB.net translation.

Thanks Patrice.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top