这是不正确使用通配符?我正在尝试匹配包含日期的String。我不想在返回的String中包含日期,也不希望在匹配的String前面添加String值。
object FindText extends App{
val toFind = "find1"
val line = "this is find1 the line 1 \n 21/03/2015"
val find = (toFind+".*\\d{2}/\\d{2}/\\d{4}").r
println(find.findFirstIn(line))
}
输出应为:“find1 the line 1 \ n”
但找不到String。
答案 0 :(得分:2)
问题在于测试字符串中的换行符。 .*
显然与换行符不匹配。用.*\\n?.*
替换它应该解决它。也可以在正则表达式中使用多行标记,例如:
val find = ("(?s)"+toFind+".*\\d{2}/\\d{2}/\\d{4}").r
答案 1 :(得分:2)
默认情况下,Dot与换行符不匹配。你可以设置一个DOTALL标志来实现它(我还添加了一个“积极的预测 - (?=...)
东西 - 因为你不希望日期包含在匹配中”:val find = (toFind+"""(?s).*(?=\d{2}/\d{2}/\d{4})""").r
(另请注意,在scala中,您不需要在字符串中转义特殊字符,用三对引号括起来......非常简洁。)