Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式模式_Java_Regex_Split - Fatal编程技术网

java正则表达式模式

java正则表达式模式,java,regex,split,Java,Regex,Split,我有一段时间被一个正则表达式绊住了,它能让我做到以下几点: 用以下句子拆分我的句子:“[\W+]” 但是如果它找到这样一个词:“aaa-aa”(不是“aaa-aa”或“aaa-aaa-aa”),这个词不是分开的,而是整个词 基本上,我想把每个单词分成一个句子,但也考虑到“aaa aa”是一个单词。通过创建两个单独的函数,一个用于使用\w拆分,另一个用于查找“aaa aa”之类的单词,我已经成功地做到了这一点。最后,我添加了这两个词,并对每个复合词进行了分类 例如,这句话: “你好,我叫理查德”

我有一段时间被一个正则表达式绊住了,它能让我做到以下几点:

  • 用以下句子拆分我的句子:“[\W+]”
  • 但是如果它找到这样一个词:“aaa-aa”(不是“aaa-aa”或“aaa-aaa-aa”),这个词不是分开的,而是整个词

    基本上,我想把每个单词分成一个句子,但也考虑到“aaa aa”是一个单词。通过创建两个单独的函数,一个用于使用\w拆分,另一个用于查找“aaa aa”之类的单词,我已经成功地做到了这一点。最后,我添加了这两个词,并对每个复合词进行了分类

    例如,这句话:

    “你好,我叫理查德”

    首先我收集{你好,我的名字是理查德} 然后我收集{我的名字} 然后我把{我的名字}加到{你好,我的名字,是,理查德} 然后我在这里取出{my}和{name}{你好,我的名字,是Richard}。 结果:{你好,我叫理查德}

    这种方法满足了我的需要,但对于解析大文件来说,这会变得太重,因为每个句子都需要太多的副本。所以我的问题是,我能做些什么来把所有的东西都包含在一个模式中?比如:

    “用这个模式分割我的文本”[\W+],但是如果你找到一个这样的单词“AAA AA”,把它看成是一个词而不是两个词。


为什么不使用模式
\\s+
?这完全符合您的要求,无需任何技巧:将文本拆分为以空格分隔的单词。

几乎与您的:

String句子=“你好,我叫理查德”;

Pattern Pattern=Pattern.compile((?您的描述不够清楚,但为什么不将其按空格分开?

我不确定此模式是否有效,因为我没有Java开发工具,您可以尝试一下,它使用字符类减法,据我所知,只有Java正则表达式支持此模式:

[\W&&[^-]]+
这意味着如果字符是[\W]和[^-],则匹配字符,即字符是[\W]而不是[-]。

如果要使用split()而不是显式匹配感兴趣的单词,则应执行以下操作:
[\s-]{2,}|\s
要打破这一点,首先要在两个或多个空格和/或连字符上进行拆分,因此单个'-'不匹配,因此将只保留'一两','一两',甚至'一两',将拆分为'一'和'二'。这仍然使单个空格的'正常'情况-'一两'-不匹配,因此我们需要在or(“|”)后面加上一个空格(\s)。请注意,替代项的顺序很重要-由“|”分隔的子表达式从左到右求值,因此我们需要将空格和连字符放在第一位。如果我们以相反的方式进行,当出现类似“1-2”的内容时,我们将匹配第一个空格并返回“1”,“2”


如果您想以交互方式使用Java REs,我可以向您推荐一种方法,它允许您编辑RE,并在编辑RE时看到它与示例字符串相匹配。

例如,我希望将“blue sky”视为一个单词,而不是两个:{blue,sky}好的,所以用空间分割给你需要的东西。试试看。实际上不。P:我不想考虑这样的事情:“------”或“AAAA”或“AAAA—AAAA AAA”。“。工作非常出色。非常感谢,终于解决了这个噩梦。你能帮我一个忙,用\\W而不是a-zA-a更新代码吗。因为我还想允许使用áíõ等..我解决了添加以下内容的问题:“À-ÿ”,但如果不是所有字母都放在一个单词中,模式运行得更快。你认为呢?这很好,但我想把“word2car”作为一个单词排除。相反,“word”和“car”将被考虑。什么是必要的更改?这取决于-是否希望所有出现的“2”都是单词分隔符,还是仅在特定单词之间?如果它在任何地方,您可以将RE更改为
\B2\B |[\s-]{2,}|\s
。\B与非单词边界匹配,因此它将分割“a2b”,而不是“2nd”。但是,这也会将包含“2”的数字分割为单独的部分,这可能不是您想要的。在这种情况下,
(?
[\W&&[^-]]+