删除字符串中反斜杠的出现,不要再跟着另一个反斜杠或管道

时间:2018-07-02 08:54:00

标签: regex scala

需要帮助来创建可在以下情况下使用反斜杠的正则表达式。

1>如果该字符串包含反斜杠,那么我不应该连续返回另一个反斜杠或管道,而不应该返回不带反斜杠的字符串

2>如果该字符串连续包含一个反斜杠和一个管道,那么我不应该删除反斜杠。

3>如果它包含反斜杠,然后依次包含另一个反斜杠(\\),则我不应该删除反斜杠。

scala> val str = """Sports\s"""
str: String = Sports\s

scala> str.replaceAll("""\\""", "")
res70: String = Sportss

scala> val str = """Sports\\s"""
str: String = Sports\\s

scala> str.replaceAll("""\\""", "")
res71: String = Sportss

scala> val str = """Sports\\|s"""
str: String = Sports\\|s

scala> str.replaceAll("""\\""", "")
res74: String = Sports|s

在上述测试中,如果字符串包含单个反斜杠或反斜杠与竖线的组合,则退格将被完全删除,我该如何修改以解决这种情况?


基于我之前的问题,提供了有效的答案,但这是另一种解决方案不起作用的情况。

scala> val str = "Spo\\rts\\s"
str: String = Spo\rts\s

scala> str.replaceFirst("""^([^\\|]*)\\([^\\|]*)$""", "$1$2")
res102: String = Spo\rts\s

预期输出应不包含\

1 个答案:

答案 0 :(得分:0)

您可以使用

s.replaceAll("""(\\+[\\|])|\\""", "$1")

请参见regex demo online

模式详细信息

  • (\\+[\\|])-捕获组1:
    • \\+-1个或更多\字符
    • [\\|]-一个\|字符
  • |-或
  • \\-反斜杠

$1替换模式会将值插入捕获组#1中。

请参见Scala demo

val p = """(\\+[\\|])|\\"""
println("""Sports\s""".replaceAll(p, "$1"))  // => Sportss
println("""Sports\|s""".replaceAll(p, "$1")) // => Sports\|s
println("""Sports\\s""".replaceAll(p, "$1")) // => Sports\\s
println("""Sports|\\s""".replaceAll(p, "$1"))// => Sports|\\s