Regex 检查字符串是否包含Scala中的字符

Regex 检查字符串是否包含Scala中的字符,regex,scala,pattern-matching,Regex,Scala,Pattern Matching,我有一个字符串集合,我正在检查它们是否被正确屏蔽 它们在一个映射中,所以我对它进行迭代,提取文本值,然后进行检查。我正在尝试各种不同的组合,但没有一种能给我所需要的最终结果。我通过对每个字符进行迭代使其工作,但这感觉非常像java 我的收藏是这样的: “文本”->“文本” “文本”->“**xt” “文本”->“***” 在前两种情况下,我需要确认值没有全部用星号标出,然后将它们添加到可以返回的另一个列表中 编辑 我的问题是:我需要检查该值是否包含除“*”以外的任何内容,如何以最有效的scala

我有一个字符串集合,我正在检查它们是否被正确屏蔽

它们在一个映射中,所以我对它进行迭代,提取文本值,然后进行检查。我正在尝试各种不同的组合,但没有一种能给我所需要的最终结果。我通过对每个字符进行迭代使其工作,但这感觉非常像java

我的收藏是这样的: “文本”->“文本” “文本”->“**xt” “文本”->“***”

在前两种情况下,我需要确认值没有全部用星号标出,然后将它们添加到可以返回的另一个列表中

编辑 我的问题是:我需要检查该值是否包含除“*”以外的任何内容,如何以最有效的scala方式实现这一点


我在regex上的尝试也失败了,出现了许多误报,这似乎是一项如此简单的任务。我不确定正则表达式是否是可行的方法,我还想知道是否有一种方法可以应用。包含或使用模式匹配

如果我理解正确,您希望在地图中找到值不仅仅是星星的键。可以使用正则表达式执行此操作:

val reg = "\\*+".r
yourMap.filter{ case (k,v) => !reg.matches(v) }.keys
如果无法与正则表达式兼容,可以使用forall语句:

yourMap.filter{ case(k,v) => v.forall(_ == '*') }.keys

!string.matches(“\\*+”)
将告诉您字符串是否包含
*
以外的字符

也许我误解了你的问题,但如果你从一张地图开始,你可以尝试以下方法:

val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****")
val newStrings = myStrings.filterNot( _._2.contains("*") )
这将为您提供一个只包含
映射(1->“文本”)的映射

val myStrings = Map("1"-> "text", "2"-> "**xt", "3"-> "****")
val goodStrings = myStrings.filter(_._2.exists(_ !='*'))
这将查找映射中的值包含星号以外的内容的所有情况。它将删除所有空字符串和仅带星号的字符串。对于这样简单的事情,例如一个检查,正则表达式是多余的:您只需要查找包含任何非星号字符的字符串

如果只需要值而不需要整个贴图,请使用:

val goodStrings = myStrings.values.filter(_.exists(_ !='*'))

你的问题是什么?检查字符串是否包含字符是由yourString.contains(yourChar)完成的,但是您似乎有几个问题,没有一个是这样的clear@UlysseMizrahi,对不起,说得太多了。为清晰起见进行了编辑。您说该集合是一个地图,但“文本”->“文本”、“文本”->“**xt”、“文本”->“****”并没有描述
地图。不能使用同一个键引用不同的数据值。@Łukasz否,这只匹配不包含任何星号的字符串。