正则表达式程序更改,不包括空格

时间:2011-01-20 13:57:21

标签: java regex

我有一个语句,它找到包含一个字符的字符串,比如说P.当匹配一个没有空格分隔的字符串时,它会起作用

e.g。

APAXA

正则表达式为^[^P]*P[^P]*$

它选择了这个字符串,但是,如果我有一个字符串

怎么办
XPA  DREP EDS

正则表达式可以识别一行中与条件匹配的所有字符串(字符串总是被某种白色空格分隔 - 制表符,空格等)?

e.g。我如何突出XPA和DREP

我使用while(m.find())多次循环和System.out.println(m.group())

所以m.group必须包含整个字符串。

6 个答案:

答案 0 :(得分:2)

按空格拆分,然后根据现有正则表达式检查每个标记。

答案 1 :(得分:1)

为什么它必须是一个过于复杂的正则表达式?

String string = "XPA  DREP EDS";
String[] s = string.split("\\s+");
for( String str: s){
  if ( str.contains("P") ){
     System.out.println( str );
  }
}

答案 2 :(得分:0)

您可以尝试使用\s模式(匹配空格)。请查看java的这个regexp页面。

答案 3 :(得分:0)

\b[^P\s]*P[^P\s]*\b

将匹配包含恰好一个P的所有单词。在从Java字符串构造正则表达式时,不要忘记加倍反斜杠。

<强>解释

\b      # Assert position at start/end of a word
[^P\s]* # Match any number of characters except P and whitespace
P       # Match a P
[^P\s]* # Match any number of characters except P and whitespace
\b      # Assert position at start/end of a word

请注意,在处理Unicode字符串时\b与所有字边界不匹配(感谢tchrist提醒我)。如果是这种情况,您可能希望将\b替换为(不要看):

(?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]))

(摘自this question's获奖答案)

答案 4 :(得分:0)

  

Thr reex是^ [^ P] P [^ P] $

这样的正则表达式只找到包含一个P的字符串,这可能是也可能不是你想要的。我想你想要.*P.*

要查找包含至少一个 P的所有单词,您可以使用\\S+P\\S+,其中\S代表非空白字符。您可以考虑使用\w

要查找包含恰好一个 P的所有单词,您可以使用更复杂的[^\\sP]+P[^\\sP]+(?=\\s)。在这里,\s代表空白,[^abc]匹配abc的所有预期,(?=...)是预见。没有前瞻,你会在“APBPC”中找到两个“单词”:“APB”和“PC”。

答案 5 :(得分:0)

尝试在您的否定字符类中添加空格字符(\s),并且还要删除^$锚点:

[^P\s]*P[^P\s]*

或作为Java String文字:

"[^P\\s]*P[^P\\s]*"

请注意,上面的对Unicode有效,只有ASCII(如评论中提到的tchrist)。