【问题标题】:How to get a dollar sign in Java regex如何在 Java 正则表达式中获取美元符号
【发布时间】:2015-10-21 13:54:42
【问题描述】:

我一直在看这个:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

但是我仍然很难编写正确的命令来使所有表达式都遵循这种模式:

 <$FB $TWTR are getting plummetted> 

( 实际上只是在我解析推特时表示句子推文的开头)。我要提取FB TWTR。

非常感谢任何帮助。

【问题讨论】:

  • 你当前的代码是什么样的?
  • 具体要求是什么? "获取所有遵循此模式的表达式的命令" 你想捕获整个字符串还是只捕获里面的消息?
  • 如果您想要一个单一的正则表达式解决方案,have a look at this regex。它将在 Java 中工作(只是双转义反斜杠)。但是,我宁愿用&lt;[^&gt;]*?&gt; 获取&lt;...&gt; 子字符串,然后按空格分割并检查每个元素是否以$ 开头。

标签: java regex


【解决方案1】:

这是一个两步法:我们使用正则表达式提取 &lt;...&gt; 组,然后将块拆分为单词,看看它们是否以 $ 开头。

String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("<([^>]+)>");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    String[] chks = matcher.group(1).split(" ");
    for (int i = 0; i<chks.length; i++)
    {
        if (chks[i].startsWith("$"))
            System.out.println(chks[i].substring(1));
    }
} 

demo

这是一种 1-regex 方法 (see demo),仅当您对 regex 有信心时才使用:

String s = "<$FB $TWTR are getting plummetted>";
Pattern pattern = Pattern.compile("(?:<|(?!^)\\G)[^>]*?\\$([A-Z]+)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

这里使用的正则表达式是(?:&lt;|(?!^)\G)[^&gt;]*?\$([A-Z]+)

匹配:

  • (?:&lt;|(?!^)\G) - 文字 &lt;,然后在每次成功匹配结束时
  • [^&gt;]*? - 除&gt; 之外的0 个或多个字符(尽可能少)
  • \$ - 文字 $
  • ([A-Z]+) - 匹配并捕获大写字母(替换为最适合您的目的,也许是 \\w)。

【讨论】:

  • 非常感谢您的详细解释。真的很感激那个伙伴。
  • 不客气。如果您觉得我的回答有帮助,也请考虑点赞。
猜你喜欢
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多