需要帮助来创建可在以下情况下使用反斜杠的正则表达式。
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
预期输出应不包含\
答案 0 :(得分:0)
您可以使用
s.replaceAll("""(\\+[\\|])|\\""", "$1")
模式详细信息
(\\+[\\|])
-捕获组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