当前位置: 首页 > 知识库问答 >
问题:

使用正则表达式的Java子字符串未返回正确的字符串[duplicate]

长孙知
2023-03-14

我有以下字符串

decrypted_my_content_456974543290983824.csv

并且我想要一个简单的正则表达式来获取decrypted和last_之间的字符串,这意味着我想要返回my_content。

我的正则表达式如下

(?<=decrypted_).*(?=_)

在不同的在线工具(如regex101)中进行了测试,结果我得到了我想要的东西。但是,在代码中


        Pattern compiledRegex = Pattern.compile("(?<=decrypted_).*(?=_)");
        Matcher matcher = compiledRegex.matcher("decrypted_my_content_456974543290983824.csv");

        if (matcher.matches())
        {
            System.out.println("success");
        }

它不起作用的原因--我想我错过了一些转义字符还是?此外,如果有更好的方法来编写上述场景的reg exp,我将非常感谢更熟悉正则表达式的人的帮助。

谢谢!

共有1个答案

淳于嘉树
2023-03-14

只需使用以下正则表达式

(?<=_).*(?=_)

同样,正如@Thomas所说,您可能不应该使用matcher.match()。取而代之的是使用

matcher.find()

先用后用

matcher.group()

如果“find”返回true

您的代码将如下所示:

Pattern compiledRegex = Pattern.compile("(?<=_).*(?=_)");
Matcher matcher = compiledRegex.matcher("decrypted_my_content_456974543290983824.csv");

if (matcher.find()) {
    System.out.println(matcher.group());
    // Output will be 'my_content'
}
 类似资料:
  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?

  • 问题内容: 如果我有这样的字符串: 我需要一种从字符串中获取“ BAR”字符串的通用方法,以便无论方括号之间是什么字符串,都可以获取该字符串。 例如 问题答案: 你应该能够使用非贪婪的量词,特别是*?。你可能需要以下条件: 这将为你提供一个与你的字符串匹配的模式,并将文本放在第一组的方括号内。请查看Pattern API文档以获取更多信息。 要提取字符串,可以使用如下所示的内容:

  • 我有一根下面这样的弦 现在我希望我的程序验证我的输入是否与字符串“phone”的模式相同 我做了以下工作 没奏效。我也尝试了其他的组合。什么都不起作用。 问题:1。我怎样才能做到这一点,而不使用‘模式’像上面?2.如何用图案做到这一点。我尝试了如下模式 Pattern Pattern=Pattern.compile(“(\d+)”);Matcher match=pattern.Matcher(电话

  • 问题内容: 我需要从字符串中提取: 使用Java语言中的正则表达式。 有人可以帮帮我吗?我是第一次使用正则表达式。 问题答案: 尝试

  • 问题内容: 我有这串 并且我需要提取这3个子字符串 1234 06:30 07:45 如果我使用此正则表达式\\ d {2} \:\\ d {2}我只能提取第一个小时的06:30 matcher.group(1)引发异常。 另外我也不知道如何提取1234。此字符串可以更改,但总是在’XX〜’之后 。您对如何将这些字符串与正则表达式匹配有任何想法吗? 更新 多亏了亚当的建议,我现在有了这个正则表达式

  • 我想为C中的一些字符串创建一个正则表达式。 这就是我目前的情况: C中的字符串由双引号(")分隔,因此正则表达式必须由 \" \". 字符串可能不包含换行符,因此我需要执行[^\n](我想)。 字符串还可能包含双引号或反斜杠字符,如果且仅当它们被转义时。因此[\\\”](我想也是这样)。 除此之外,什么都可以。 任何帮助是非常感谢我有点迷失了如何开始写这个正则表达式。