正则表达式的第一个单词和最后一个单词分隔

时间:2016-01-20 13:53:46

标签: java regex

我试图获得以下表达式的正则表达式,但无法实现:

  • 字符串有4个用点(。)分隔的单词。
  • 第一个单词与给定单词匹配(例如HELLO)。
  • 第二个和第三个单词可以有任何字符,但点本身(。)。
  • 最后一个单词再次匹配给定的单词(例如csv)。

所以:

  • HELLO.something.Somethi#gElse.csv应匹配。
  • something.HELLO。?。csv不应该匹配。
  • HELLO.something ... csv不应该匹配。
  • HELLO.something.somethingelse.notcsv不应该匹配

我可以使用split(。)然后检查单个单词,但我尝试使用Regex和Pattern类。

任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:3)

只要你理解字符类,这是相对简单的。带方括号[xyz]的正则表达式匹配列表{x, y, z}中的任何字符;正则表达式[^xyz]匹配 {x, y, z}以外的任何字符

现在您可以构建表达式:

^HELLO\.[^.]+\.[^.]+\.csv$

+表示"前面一个或多个表达式&#34 ;; \.表示"点自己"。 ^表示"字符串的开头&#34 ;; $表示"字符串的结尾"。这些锚点阻止正则表达式匹配

blahblahHELLO.world.world.csvblahblah

Demo.

编写这样的正则表达式的一个共同目标是捕获某些内容,例如,第一个和第二个点之间的字符串,以及第二个和第三个点之间的字符串。使用捕获组将这些字符串的内容带入Java程序:

^HELLO\.([^.]+)\.([^.]+)\.csv$

每对括号定义一个捕获组,从1索引(索引为零的组表示整个表达式的捕获)。从模式中获取匹配对象后,可以查询组中的匹配对象,并提取相应的字符串。

请注意,Java正则表达式中的反斜杠需要加倍。

答案 1 :(得分:0)