【问题标题】:Is there a way to include DOT but not a Double Integer in Java Regex?有没有办法在 Java 正则表达式中包含 DOT 但不包含双整数?
【发布时间】:2019-11-18 16:01:36
【问题描述】:

我有

String prog = "public class HelloWorld {\n" + "public static void main.(String[] args) int b = 0.5 \n"

(这里字符串中main后面的点(.)是有目的的)

这里我需要将字符串作为一个整体分成以下组件 -

  1. 公开
  2. HelloWorld
  3. {
  4. 公开
  5. 静态
  6. 无效
  7. 主要
  8. .
  9. (
  10. 字符串
  11. [
  12. ]
  13. 参数
  14. )
  15. int
  16. b
  17. =
  18. 0.5

数字和 .仅供参考(即 1. , 2. , 11. )。输出必须是组件

我已将 split() 与 \\s+ 一起使用,并向前看和向后看符号的断言:-
(+-*/[);].

String[] words = prog.split("\\\s+|((?<=])|(?=]))|((?<=\\[)|(?=\\[))|((?<=\\()|(?=\\())|((?<=\\))|(?=\\)))|((?<=[-+*/=;.])|(?=[-+*/=;.]))");

请原谅复杂性。任何压缩都将不胜感激。

它可以很好地提供组件,但是在尝试拆分 main 时。进入主要和 .在保持 0.5 不变的同时,我使用的表达式 ((?/=;.])|(?=[-+/=;.])) 不起作用。

它分隔主要。进入主要和 .但也是 0.5 到 0 和 .和 5

我需要 0.5 保持为 0.5 ,即 double 保留为 double,同时拆分 main。进入主要和 .

请提供一个正则表达式来分隔句点和字符串,但保持双整数不变。

【问题讨论】:

  • 不清楚您打算在这里做什么,我的意思是您要解决的问题。对于正则表达式调整,有在线工具。这是一个regexr.com
  • public static void main. main 之后的点对我来说似乎很可疑。是不是打错字了?
  • 点不是错字,是故意的
  • 我想再举一个例子:- String prog = "System.out.println (0.5) "。我需要输出使得有八个字符串:- System , . , 出去, 。 , println, ( , 0.5, ) 我希望 0.5 保持原样,但是当句点不在数字之间时,作为单独的字符串。希望这能澄清我的问题。道歉并谢谢你

标签: java string split double


【解决方案1】:

通过使用具有以下模式的正式正则表达式模式匹配器,我能够接近您的预期输出:

[\\[\\]{}()+/*-]|[^\\s\\[\\]{}()+/*-]+

这个模式要么匹配单个符号[]{}()+/*-,要么匹配一个非符号字符,它也不是空白字符,零次或多次。

String prog = "public class HelloWorld {\n" + "public static void main(String[] args) int b = 0.5 \n";
String pattern = "[\\[\\]{}()+/*-]|[^\\s\\[\\]{}()+/*-]+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(prog);
while (m.find()) {
    System.out.println(m.group());
}

打印出来:

public
class
HelloWorld
{
public
static
void
main
(
String
[
]
args
)
int
b
=
0.5

请注意,解决此问题的最佳方法可能是编写某种 Java 解析器,它可以根据需要梳理组件。我的解决方案很容易无法在其他 Java sn-ps 上运行。

【讨论】:

  • 感谢您的帮助。我想知道是否有办法使用 split() 来做同样的事情。另外,我不太确定您提到的 Java 解析器。
  • 另外,在输出中,我需要在 main 之后获取句点 (.),如图所示,同时保持 0.5 不变。
  • 是的,我知道。它只是故意包含在字符串中。这只是为了测试我们是否可以将输出中的点(。)分开,同时保持 0.5 不变。这不是错字。
【解决方案2】:

要匹配一个文字点,你需要转义它,所以\. 对于 0.5 ,你可以使用这个

/^\d*\.?\d*$/

【讨论】:

  • 有没有办法做到这两点?即通过文字点解析但不解析双整数,即单独的 main。进入主要和 .但同时保留 0.5 且不分离。
猜你喜欢
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2016-04-02
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多