繁体   English   中英

正则表达式-在scala中的字符串后替换单个字符

[英]Regex - Replace single character after a string in scala

我的文字类似于:

"ciao cos? come stai??"

我想在一个字符序列(即[a-zA-Z0-9])之后用另一个字符替换(在使用Regex的Scala中)一个问号。 因此,在前面的示例中,如果我们假设我要替换“?” 带有“ _”的结果应为:

"ciao cos_ come stai_?"

编辑 :是的,我尝试了一些也在SO上找到的解决方案,例如此链接中的 在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, "_")

原始链接发布在上一个链接中,并在输入中添加了另一个字符串,但它不起作用。

谢谢

我不了解scala,但经过研究后,我设法为您构建了一些东西。

如果您只想处理英文字符,请在这里使用正则表达式

val str = "ciao cos? come stai??".replaceAll("""((?i)[A-Z]+)\?""", "$1_");

说明

  • (?i) :表示不区分大小写。
  • [AZ]+ :一个或多个英文字母
  • () :捕获组
  • ((?i)[AZ]+) :捕获一个或多个英文字母(无论大小写)
  • (\\?) :捕获文字字符“?” 在第二组中(它必须用反斜杠转义,因为问号在正则表达式中具有特殊含义)。
  • ((?i)[AZ]+)\\? :立即在第一个捕获组中捕获尽可能多的字母,然后在第二个捕获组中捕获一个问号。

  • $1 :放置第一个捕获组的内容

  • $1_ :将第一个捕获组的内容放在下划线之后。 问号将消失。

要处理来自任何语言的任何字母(例如,法语字母“é”,您可以使用以下代码):

val str = "j'aime le karaté?".replaceAll("""(\p{L}+)\?""", "$1_");
  • \\p{L} :在任何情况下,代表任何unicode字母。

我使用此站点来测试正则表达式:

http://www.tryscala.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM