我的文字类似于:
"ciao cos? come stai??"
我想在一系列字符(即[a-zA-Z0-9])之后用另一个字符替换(在Scala中使用Regex)一个问号。所以在上一个例子中,如果我们假设我想要替换"?"使用" _",结果应为:
"ciao cos_ come stai_?"
修改:是的,我尝试了一些在SO上找到的解决方案,就像在link中一样。在Scala中我尝试过:
val text = "some? ??"
val regex = "/([a-zA-Z0-9])?/".r
val text11 =regex.replaceAllIn(text, "_")
但是:
val text = "some? ??"
val regex = "/([a-zA-Z0-9])?([a-zA-Z0-9])/".r
val text11 =regex.replaceAllIn(text, "_")
原来的一个在上一个链接中发布了另一个输入字符串,但它没有用。
由于
答案 0 :(得分:0)
我不知道scala,但经过一些研究后,我设法为你构建一些东西。
这里是正则表达式,如果你只想处理英文字符
val str = "ciao cos? come stai??".replaceAll("""((?i)[A-Z]+)\?""", "$1_");
解释:
(?i)
:表示不区分大小写。[A-Z]+
:一封或多封英文字母()
:捕获组((?i)[A-Z]+)
:捕获一封或多封英文字母(无论情况如何)(\?)
:捕获字面字符'?'在第二组中(必须使用反斜杠进行转义,因为问号在正则表达式中具有特殊含义)。 ((?i)[A-Z]+)\?
:在第一个捕获组中捕获尽可能多的字母,然后立即捕获第二个捕获组捕获的问号。
$1
:放置第一个捕获组的内容
$1_
:将第一个捕获组的内容后跟下划线。问号将消失。要处理来自任何语言的任何信件(例如法语字母“é”,您可以使用此信息:
val str = "j'aime le karaté?".replaceAll("""(\p{L}+)\?""", "$1_");
\p{L}
:无论如何,这代表任何unicode信件。我用这个网站来测试正则表达式: