gpt4 book ai didi

regex - 正则表达式组匹配和替换在单个语句中

转载 作者:行者123 更新时间:2023-12-04 00:24:21 24 4
gpt4 key购买 nike

我正在使用代码生成工具,并且需要转换这样的方法调用(它是java):

public MyObjectType MyObjectType(){


转换成更java的版本:

public MyObjectType myObjectType(){


我有这个Scala代码的工作片段来做到这一点:

val pattern = """[\s]+public[\s]+[\w]+[\s]+([\w]+\(\))\{""".r

val tmp = pattern.findAllIn(s).matchData map { m =>
val x = m.group(1).replaceAll("\\(\\)", "\\\\(\\\\)")
s.replaceAll(x, firstLowerCase(x))
}
// if there is no match, return unmodified string,
// otherwise return the only match
val converted = if (tmp.isEmpty) s else tmp.next()


其中 s是一行代码,可能是转换的候选对象。

函数 firstLowerCase定义为:

def firstLowerCase(s: String): String = {
val (first, rest) = s.splitAt(1)
first.toLowerCase + rest
}


上面的代码可以正常工作,但是我想知道是否有可能将其缩小一些(理想情况下是单个模式匹配语句),例如,通过(以某种方式)删除 ()\(\)的显式转换,一场比赛并替换,或者在替换中包含以上功能。我不是正则表达式专家,所以也许这个问题太多了。有想法吗?

最佳答案

试试这个:

val pattern = """(public\s+\w+\s+)(\w)(?=\w*\(\)\{)""".r
val converted = pattern.replaceAllIn(s, m => m.group(1) + m.group(2).toLowerCase)


replaceAllIn使得不必执行 findAllIn,然后返回并执行 replaceAll。我们匹配模式的开始部分,需要小写的字符,然后使用前瞻性断言来处理其余部分(我们不需要替换它,只需要确认它存在即可)。替换文本是模式的开始,并且不需要将单个字符变为小写, firstLowerCase

关于regex - 正则表达式组匹配和替换在单个语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23248984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com