如何创建一个正则表达式转义,以便它代表一个普通的字符串?

时间:2018-01-10 15:55:46

标签: regex string scala

在寻找方法时如何计算长字符串中字符串的出现次数我发现one variant这对我来说很好看:

String.contains

现在我拥有的不是正则表达式,只是一个普通的字符串。有什么方法可以轻松地将字符串转换为正则表达式,以便它与原始字符串匹配时的方式相同,就像使用"Do I (really) want to match? Yes, I do."时一样?

示例:要匹配的字符串可能是var object = { Results: { circle: 0.06879016757011414, quad: { exp: 0.8039023876190186, actual: 0.19609761238098145 }, square: 0.8266428709030151 } }; Object .keys(object.Results) .forEach(function (k) { if (object.Results[k] && typeof object.Results[k] !== 'object') { object.Results[k] = { [k]: object.Results[k] }; } }); console.log(object);。这需要转义为与原始字符串匹配的正则表达式。

注意:仅考虑子字符串计数 - 我知道这种特殊情况可以通过其他方式解决,但是有更多函数需要正则表达式输入并且能够将普通字符串传递给它们可能是有用的。< / em>的

2 个答案:

答案 0 :(得分:1)

您正在寻找java.util.regex.Pattern.quote(substr) ...实际上与s"""\Q$substr\E"""相同

此外,正则表达式可能不是这样的任务的最佳工具。您可以使用以下内容轻松计算这些子字符串:

Iterator(str.indexOf(substr)){ n => str.indexOf(substr, n+1)
 .takeWhile(_ >= 0)
 .count(_ => true)

答案 1 :(得分:1)

作为@Dima答案的替代方案,您可以使用内置的scala Regex quote

def countSubstring(str:String, substr:String) = Regex.quote(substr).r.findAllMatchIn(str).length