gpt4 book ai didi

java - 返回java正则表达式(单词、空格、特殊字符、双引号)

转载 作者:行者123 更新时间:2023-12-01 14:09:38 32 4
gpt4 key购买 nike

我正在尝试使用 java 正则表达式来标记任何语言源文件。我想要列表返回的是:

  • 单词 ([a-z_A-Z0-9])
  • 空格
  • 任何 [()*.,+-/=&:] 作为单个字符
  • 并在引号中留下引用的内容。

这是我到目前为止的代码:

Pattern pattern = Pattern.compile("[\"(\\w)\"]+|[\\s\\(\\)\\*\\+\\.,-/=&:]");

Matcher matcher = pattern.matcher(str);
List<String> matchlist = new ArrayList<String>();

while(matcher.find()) {
matchlist.add(matcher.group(0));
}

例如,

"I" am_the 2nd "best".

返回:列表,大小8

("I", ,am_the, ,2nd, ,"best", .)

这就是我想要的。但是,如果引用整个句子(句点除外):

"I am_the 2nd best".

返回:列表,大小8

("I, ,am_the, ,2nd, ,best", .)

我希望它能够返回:列表,大小 2

("I am_the 2nd best", .)

如果这是有道理的。我相信它适用于我想要的一切,除了返回字符串文字(我想保留引号)。我在实现这一目标的模式中缺少什么?

无论如何,如果有我看不到的更容易使用的模式,请帮助我。上面显示的模式是多次试验/错误的汇编。预先非常感谢您提供的任何帮助。

最佳答案

首先,您需要将单词匹配代码与字符串文字匹配代码分开。对于单词匹配,请使用:

\w+

接下来是空格。

\s+

要将字符串作为一个标记进行匹配,您需要允许更多的字符,而不仅仅是 \w。这只允许使用字母数字字符和 _,这意味着不允许使用空格和符号。您还需要将开始和结束引号移到方括号之外。

并且不要忘记反斜杠来转义字符。您希望允许在字符串内使用 \"

"(\\.|[^"])+"

最后是符号。您可以列出所有符号,也可以将任何非单词、非空格、非引号字符视为符号。我推荐后者,这样你就不会被 @| 等其他符号噎住。因此对于符号:

[^\s\w"]

将各个部分放在一起,我们得到这个组合的正则表达式:

\w+|\s+|"(\\.|[^"])+"|[^\s\w"]

或者,正确转义所有内容,以便将其放入源代码中:

Pattern pattern = Pattern.compile("\\w+|\\s+|\"(\\\\.|[^\"])+\"|[^\\s\\w\"]");

关于java - 返回java正则表达式(单词、空格、特殊字符、双引号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627719/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com