正则表达式的第一个字和一个字符串的最后一个字
我试图得到下面的表达式一个正则表达式分离,但不能让它:正则表达式的第一个字和一个字符串的最后一个字
- 字符串有4个字用点分隔的()。 。
- 第一个单词匹配给定的单词(例如HELLO)。
- 第二和第三个单词可以有任何字符,但点本身(。)。
- 最后一个单词再次匹配给定的单词(例如,csv)。
所以:
- HELLO.something.Somethi#gElse.csv应该匹配。
- something.HELLO.?.csv不应该匹配。
- HELLO.something ... csv不应该匹配。
- HELLO.something.somethingelse.notcsv不应该匹配
我可以分裂做(。),然后检查是否有个别单词,但我试图把它与正则表达式和Pattern类工作。
任何帮助将非常感激。
这是比较直接的,只要你明白字符类。带方括号的正则表达式[xyz]
与列表中的任何字符匹配{x, y, z}
;正则表达式[^xyz]
匹配除{x, y, z}
以外的任何字符。
现在你可以构建你的表达:
^HELLO\.[^.]+\.[^.]+\.csv$
+
意味着“一个或多个前面的表达式”; \.
的意思是“点本身”。 ^
的意思是“字符串的开始”; $
表示“字符串的结尾”。这些锚防止正则表达式的匹配
blahblahHELLO.world.world.csvblahblah
一个共同的目标写这样的正则表达式是捕获一些内容,例如,第一和第二点,和之间的串第二个和第三个点之间的字符串。使用捕获组带来这些字符串的内容转换成Java程序:
^HELLO\.([^.]+)\.([^.]+)\.csv$
每对括号的限定捕获组,从1
索引(索引零组代表整个表达式的捕获)。一旦从模式获得匹配对象,就可以查询它的组,并提取相应的字符串。
请注意,Java正则表达式中的反斜杠需要加倍。
如果'HELLO ... csv'是一个有效的匹配,那么从'+' - *一个或多个*切换到'*' - *零个或多个*。 – OldCurmudgeon
很好的答案。您可能想要演示一个正则表达式,其中第一个单词可以是HELLO或WORLD或FOO,最后一个单词可以是csv或xls或txt –
还可以提到使用组来收集匹配中的每个单词。 – OldCurmudgeon
欢迎来到Stack Overflow!请包含一些代码以显示您尝试过的内容。 –