• 正则表达式的匹配


    正则表达式可以很方便地从符合特定结构的字符串中提取数据。
    Scala封装了Java 的正则表达式。以下给出一个示例:

     1 // src/main/scala/progscala2/patternmatching/match-regex.sc 
     2 
     3 val BookExtractorRE = """Book: title=([^,]+),\s+author=(.+)""".r //
     4 val MagazineExtractorRE = """Magazine: title=([^,]+),\s+issue=(.+)""".r 
     5 
     6 val catalog = Seq( 
     7   "Book: title=Programming Scala Second Edition, author=Dean Wampler", 
     8   "Magazine: title=The New Yorker, issue=January 2014", 
     9   "Unknown: text=Who put this here??" 
    10 ) 
    11 
    12 for (item <- catalog) { 
    13   item match { 
    14     case BookExtractorRE(title, author) => //
    15       println(s"""Book "$title", written by $author""") 
    16     case MagazineExtractorRE(title, issue) => 
    17       println(s"""Magazine "title", issue $issue""") 
    18     case entry => println(s"Unrecognized entry: $entry") 
    19 } 
    20 }
    • ➊ 该正则表达式匹配一个用于表示书本的字符串,其中有两个捕捉组(注意正则表达式中的括号),一个表示标题,一个表示作者。调用 r 方法以创建正则表达式。第二个正则表达式匹配一个用于表示杂志的字符串,其中的捕捉组表示杂志标题和发行时间。
    • ➋ 用法与 case 类相似,与捕捉组相匹配的字符串被提取出来,赋值给变量。

    运行的输出为:
    Book "Programming Scala Second Edition", written by Dean Wampler
    Magazine "The New Yorker", issue January 2014
    Unrecognized entry: Unknown: text=Who put this here??

    我们用三重双引号来表示正则表达式字符串,否则,就不得不对正则表达式的反斜杠进行转义,例如用 \\s 表示 \s。你还可以通过创建一个 Regex类的实例来定义正则表达式,如new Regex("""\W"""),但这种用法并不常见。
    在三个双引号内的正则表达式中使用变量插值是无效的。你依然需要对变量插值进行转义,例如,你应该用 s"""$first\\s+$second""".r,而不是s"""$first\s+$second""".r。而如果你没有使用变量插值,则不必转义。
    scala.util.matching.Regex 定义了若干个用于正则表达式其他操作的方法,如查找和替换。

  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/linbo3168/p/16544683.html
Copyright © 2020-2023  润新知