簡體   English   中英

正則表達式在Ruby中匹配,但在Java中不匹配?

[英]Regex matches in Ruby, but not in Java?

為了獲得更多關於正則表達式的經驗(同時也使工作變得更輕松),我試圖解析Java中的某些文件名。

我的字符串是這樣的: /home/user/example/Results/ExampleFilePrefix_20140324-0500_OptionalTextThatMightContainNumbers123.csv

基本上,文件名總是以ExampleFilePrefix_開頭,后跟時間戳,有時取決於文件的生成方式,有時以OptionalTextThatMightContainNumbers123結尾。 我想要的相關信息是時間戳,后跟可選文本(如果存在)。

我在弄亂各種正則表達式,雖然我可以讓它們全部與Ruby regex解析器一起工作,但我卻無法讓它們在Java中工作。 我沒有跟蹤它們,但這是我最近的嘗試:

_(\\w+-\\w+)

可以在Ruby中正常運行: http : //rubular.com/r/K2BiboURRo ,但在Java中甚至無法與之匹配: http : //fiddle.re/c7m04

由於在線解析器不匹配,我認為我編寫的代碼不是問題,但是請確保將其粘貼在此處。

private String extractFileName(String filename) {
    String resultNameBase = "RegexDidntMatch";
    Pattern pattern = Pattern.compile("_(\\w+-\\w+)", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(filename);
    if (matcher.matches() && matcher.find()) {
        resultNameBase = matcher.group(1);
    }
    return resultNameBase;
}

一如既往,感謝所有人

這部分是問題:

if (matcher.matches() && matcher.find())

Matcher#matches()將完整的輸入字符串與您的正則表達式匹配。

替換為:

if (matcher.find())

首先是其matcher.find()並捕獲組0而不是1

if (matcher.find()) {
    resultNameBase = matcher.group();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM