Scala:检查字符串是否包含单个反斜杠

时间:2017-02-03 07:43:10

标签: regex scala backslash

我已经尝试解决这个问题很长一段时间了,我不能这样做。

它可以是任何字符串,但这只是一个例子:

"\This string \contains some\ backslashes\"

我需要制作一个正则表达式,我可以用它来检查字符串是否包含单个反斜杠。

然后我需要将给定的字符串转换为(我可以进行转换):

"\\This string \\contains some\\ backslashes\\"

然后使用正则表达式检查字符串不包含单个反斜杠。

顺便说一下,我没有必要使用正则表达式,我只需要能够以某种方式检查字符串。

3 个答案:

答案 0 :(得分:2)

看起来你只是想检查一个字符串是否与正则表达式部分匹配,即,如果它包含一个前面没有反斜杠的字面反斜杠,也没有反斜杠。

使用

val s = """"\This string\\ \contains some\ backslashes\""""
val rx = """(?<!\\)\\(?!\\)""".r.unanchored
val ismatch = s match {
  case rx(_*) => true
  case _ => false
}
println(ismatch)

请参阅Scala online demo

注意:

  • """(?<!\\)\\(?!\\)""".r.unanchored - 此行声明了一个正则表达式对象,并使该模式无锚,因此match块不再需要完整的字符串匹配
  • match内,我们使用case rx(_*),因为模式本身内没有定义捕获组
  • 模式表示:匹配前面没有反斜杠(\\)的反斜杠((?<!\\)),后面没有反斜杠((?!\\))。

答案 1 :(得分:0)

不确定你问的是什么..你是否在问一个字符串文字,它代表你给出的字符串作为一个例子?您可以使用另一个反斜杠转义反斜杠,或使用三引号。

scala> "\\This string \\contains some\\ backslashes\\"
String = \This string \contains some\ backslashes\

scala> """\This string \contains some\ backslashes\"""
String = \This string \contains some\ backslashes\

使用相同的技术替换反斜​​杠。

scala> "\\This string \\contains some\\ backslashes\\".replace("\\","\\\\")
String = \\This string \\contains some\\ backslashes\\

scala> """\This string \contains some\ backslashes\""".replace("""\""","""\\""")
String = \\This string \\contains some\\ backslashes\\

但我有一种感觉,你想做其他事情,比如验证输入。也许你可以提供更多的背景?

答案 2 :(得分:0)

试试这个

val s = """\This string \contains some\ backslashes\"""

s.replaceAll("""\\""","""\\\\""")