I'd like to say something like:
foo = @"\abc\def\ghi" instead of
foo = "\\abc\\def\\ghi" How do I do this? This would be really nice for regular expressions.
I'd like to say something like:
foo = @"\abc\def\ghi" instead of
foo = "\\abc\\def\\ghi" How do I do this? This would be really nice for regular expressions.
We can implement a raw string syntax using the global variable $PreRead, which "is applied to the text or box form of every input expression before it is fed to the Wolfram Language." Using $PreRead, we can get at the string before any interpretation has been performed on it, replace it with the corresponding InputForm expression, and send that along as input to Mathematica.
Here we define a RawString "head" that signals that the RawString expression will be automatically replaced by the InputForm of its argument before being used as input:
$PreRead = ( # /. RowBox@{"RawString", "[", str_String, "]"} | RowBox@{"RawString", "@", str_String} | RowBox@{str_String, "//", "RawString"} :> RowBox@{"StringTrim", "[", ToString@InputForm@str, ",", "\"\\\"\"", "]"} )&; Note that we are dealing with the box form prior to any evaluation, so we have to use separate patterns for prefix and postfix notation. The StringTrim is inserted so that it will take effect after the input string is interpreted to remove the extraneous opening and closing quotes.
Now we can enter
"\abc\def\ghi\nop" // RawString or
RawString@"\abc\def\ghi\nop" and we get
\abc\def\ghi\nop The RawString expressions can be part of other expressions:
RawString@"\pi\ " <> RawString@"\nu\ " (* \pi\ \nu\ *) as long as each raw string is explicitly the argument of a RawString, i.e.,
RawString /@ {"\pi\ ", "\nu\ "} doesn't work.
To enter the string in without double backslash, you could use a TextCell as follows:
ToString@@Ctrl-9\abc\def\ghiCtrl-0\abc\def\ghi
FullForm[%] "\\abc\\def\\ghi"
On the first line, I open a text cell and enter the text as you wanted to type it. The ToString knows how to convert the text cell to a string, as is shown in the last FullForm output.
You could also replace ToString@@ by First@.
It is not a direct input form as you describe but Mathematica will insert the escapes for you in the right circumstance. If you copy the verbatim text \abc\def\ghi\nop and paste it between quotation marks in a Notebook you will get a dialog:

Click Yes and you get:
"\\abc\\def\\ghi\\nop"
If the string is in an external file Import will handle it correctly. For example if we put \abc\def\ghi\nop in a file named foo.txt we can then use:
Import["foo.txt", "String"] // FullForm "\\abc\\def\\ghi\\nop"
The FullForm is added merely to show that the escaped \\ are in fact present.