使用正则表达式检查字符串是否包含单个反斜杠

Check if string contains single backslashes with regex

我尝试了很长时间来解决这个问题,但就是做不到。

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

"\This string \contains some\ backslashes\"

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

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

"\This string \contains some\ backslashes\"

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

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

不确定您在问什么..您是在问如何编写表示您作为示例给出的字符串的字符串文字吗?您可以使用另一个反斜杠转义反斜杠,或者使用三重引号。

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\

但我感觉您想做些别的事情,比如验证输入。或许您可以提供更多背景信息?

试试这个

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

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

您似乎只想检查一个字符串是否部分匹配正则表达式模式,即,它是否包含前后不带反斜杠的文字反斜杠。

使用

(?<!\)\(?!\)

参见regex demo

示例 Scala 代码:

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(_*) 因为模式本身内部没有定义捕获组
  • 该模式表示:匹配前面没有反斜杠 ((?<!\)) 且后面没有反斜杠 ((?!\)) 的反斜杠 (\)。