Java 正则表达式以匹配字符串中的单个字符

Java 正则表达式以匹配字符串中的单个字符,java,javascript,regex,Java,Javascript,Regex,我想要一个正则表达式用空格替换单个字符(或删除它们) 例如,如果我有: " I have played u with no i and no j o o o o x w x x s" 它应返回: " have played with no and" 我试过: \s+\w{1}\s+ 但当我使用它时,我得到: " have played with no and no o o x x s" 我错过了什么?我认为这与某种“重叠匹配”有关 我假设语言是javascript(请检查您的标记)。我看

我想要一个正则表达式用空格替换单个字符(或删除它们)

例如,如果我有:

" I have played u with no i and no j o o o o x w x x s"
它应返回:

" have played with no and"
我试过:

\s+\w{1}\s+
但当我使用它时,我得到:

" have played with no and no o o x x s"

我错过了什么?我认为这与某种“重叠匹配”有关

我假设语言是javascript(请检查您的标记)。我看到的问题是你的正则表达式包含空格,所以如果你有“aa b c”,那么它与“a”匹配,但是c在它之前或之后没有空格

var text=" a bb c dd e f g tt"
var re=/\s*\b\w\b/g //If you're coding in Java, remove the g: "\\s*\\b\\w\\b"
text.replace(re,"") //" bb dd tt"

我假设语言是javascript(请检查您的标记)。我看到的问题是你的正则表达式包含空格,所以如果你有“aa b c”,那么它与“a”匹配,但是c在它之前或之后没有空格

var text=" a bb c dd e f g tt"
var re=/\s*\b\w\b/g //If you're coding in Java, remove the g: "\\s*\\b\\w\\b"
text.replace(re,"") //" bb dd tt"

我假设语言是javascript(请检查您的标记)。我看到的问题是你的正则表达式包含空格,所以如果你有“aa b c”,那么它与“a”匹配,但是c在它之前或之后没有空格

var text=" a bb c dd e f g tt"
var re=/\s*\b\w\b/g //If you're coding in Java, remove the g: "\\s*\\b\\w\\b"
text.replace(re,"") //" bb dd tt"

我假设语言是javascript(请检查您的标记)。我看到的问题是你的正则表达式包含空格,所以如果你有“aa b c”,那么它与“a”匹配,但是c在它之前或之后没有空格

var text=" a bb c dd e f g tt"
var re=/\s*\b\w\b/g //If you're coding in Java, remove the g: "\\s*\\b\\w\\b"
text.replace(re,"") //" bb dd tt"

您的正则表达式是这样工作的:

先查找
空格
,然后查找一个字符,再查找另一个
空格
,然后将其删除。在这种情况下,一个字符周围的空格在测试另一个字符时无法匹配,就像在

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving 

b_c and now neither `b` or `c` is surrounded with spaces so they will not 
    be removed
要解决此问题,只需在匹配中包含一个或多个空格(或字符串开头)和一个字符,如
(^ |\s+)\w

此外,为了确保此字符后面至少有一个空格(或字符串结尾),但不包括匹配的空格,您可以使用类似
(?=\s+|$)
的机制

因此,如果是Java,请尝试

String newString = yourString.replaceAll("(^|\\s+)\\w(?=\\s+|$)","");
和JavaScript

var replaced = text.replace(/(^|\s+)\w(?=\s+|$)/g,"")

顺便说一句,
\w
将匹配
[a-zA-Z0-9.
中的任何字符,因此如果您只需要字母,可以将其更改为类似
[a-zA-Z]

您的正则表达式是这样工作的:

先查找
空格
,然后查找一个字符,再查找另一个
空格
,然后将其删除。在这种情况下,一个字符周围的空格在测试另一个字符时无法匹配,就像在

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving 

b_c and now neither `b` or `c` is surrounded with spaces so they will not 
    be removed
要解决此问题,只需在匹配中包含一个或多个空格(或字符串开头)和一个字符,如
(^ |\s+)\w

此外,为了确保此字符后面至少有一个空格(或字符串结尾),但不包括匹配的空格,您可以使用类似
(?=\s+|$)
的机制

因此,如果是Java,请尝试

String newString = yourString.replaceAll("(^|\\s+)\\w(?=\\s+|$)","");
和JavaScript

var replaced = text.replace(/(^|\s+)\w(?=\s+|$)/g,"")

顺便说一句,
\w
将匹配
[a-zA-Z0-9.
中的任何字符,因此如果您只需要字母,可以将其更改为类似
[a-zA-Z]

您的正则表达式是这样工作的:

先查找
空格
,然后查找一个字符,再查找另一个
空格
,然后将其删除。在这种情况下,一个字符周围的空格在测试另一个字符时无法匹配,就像在

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving 

b_c and now neither `b` or `c` is surrounded with spaces so they will not 
    be removed
要解决此问题,只需在匹配中包含一个或多个空格(或字符串开头)和一个字符,如
(^ |\s+)\w

此外,为了确保此字符后面至少有一个空格(或字符串结尾),但不包括匹配的空格,您可以使用类似
(?=\s+|$)
的机制

因此,如果是Java,请尝试

String newString = yourString.replaceAll("(^|\\s+)\\w(?=\\s+|$)","");
和JavaScript

var replaced = text.replace(/(^|\s+)\w(?=\s+|$)/g,"")

顺便说一句,
\w
将匹配
[a-zA-Z0-9.
中的任何字符,因此如果您只需要字母,可以将其更改为类似
[a-zA-Z]

您的正则表达式是这样工作的:

先查找
空格
,然后查找一个字符,再查找另一个
空格
,然后将其删除。在这种情况下,一个字符周围的空格在测试另一个字符时无法匹配,就像在

_a_b_c
^^^ -this part matches our pattern so it will be removed leaving 

b_c and now neither `b` or `c` is surrounded with spaces so they will not 
    be removed
要解决此问题,只需在匹配中包含一个或多个空格(或字符串开头)和一个字符,如
(^ |\s+)\w

此外,为了确保此字符后面至少有一个空格(或字符串结尾),但不包括匹配的空格,您可以使用类似
(?=\s+|$)
的机制

因此,如果是Java,请尝试

String newString = yourString.replaceAll("(^|\\s+)\\w(?=\\s+|$)","");
和JavaScript

var replaced = text.replace(/(^|\s+)\w(?=\s+|$)/g,"")


顺便说一句,
\w
将匹配
[a-zA-Z0-9.
中的任何字符,因此如果您只需要字母,可以将其更改为类似
[a-zA-Z]

应该是“没有也没有”吗?第一个空格是故意的吗?展示一些代码(你是如何使用这个正则表达式的)。我计划在Java中使用它,它应该是“haveplayewithno”和“no”?第一个空格是故意的吗?展示一些代码(你是如何使用这个正则表达式的)。我计划在Java中使用它,它应该是“haveplayewithno”和“no”?第一个空格是故意的吗?展示一些代码(你是如何使用这个正则表达式的)。我计划在Java中使用它,它应该是“haveplayewithno”和“no”?第一个空格是故意的吗?展示一些代码(你是如何使用这个正则表达式的)。我计划在JavaI中使用它,我不知道Lookahead操作符(从未使用过)。谢谢,这正是我想要的。(^\s++)\w(?=\s++$)最终使用了此修改。我不知道Lookahead运算符(从未使用过)。谢谢,这正是我想要的。(^\s++)\w(?=\s++$)最终使用了此修改。我不知道Lookahead运算符(从未使用过)。谢谢,这正是我想要的。(^\s++)\w(?=\s++$)最终使用了此修改。我不知道Lookahead运算符(从未使用过)。谢谢,这正是我想要的。(^\s++)\w(?=\s++$)最终使用了这个修改。实际上这很简单。。。我缺少单词边界操作符。@mfcabrera我想说这可能太简单了,因为它在
I
中也会接受
I
m
。我不知道为什么会有人投反对票。。。看起来并不是那么简单。实际上这很简单。。。我缺少单词边界运算符。@mfcabrera I wo