Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 - Fatal编程技术网

Java 删除字符串中多余的标点符号,同时保留“;笑脸;?

Java 删除字符串中多余的标点符号,同时保留“;笑脸;?,java,regex,Java,Regex,我在使用正则表达式时遇到了一些问题。你能帮帮我吗? 以下是我试图解决的问题: Input - :,... :(..:::))How are you today?..:( Output - :( :) How are you today :( 基本上,我想删除输入字符串中的标点符号,如-(,:;等),并用空字符串替换它们。但是我想保留微笑-:)或:(。我已经编写了以下代码,但它不起作用 String s = ":,... :(..:::))How are you today?..:( ";

我在使用正则表达式时遇到了一些问题。你能帮帮我吗? 以下是我试图解决的问题:

Input - :,... :(..:::))How are you today?..:(
Output - :( :) How are you today :(
基本上,我想删除输入字符串中的标点符号,如-(,:;等),并用空字符串替换它们。但是我想保留微笑-:)或:(。我已经编写了以下代码,但它不起作用

String s = ":,... :(..:::))How are you today?..:( ";  
Pattern pattern = Pattern.compile("^(\\Q:)\\E|\\Q:(\\E)(\\p{P}+)");  
Matcher matcher = pattern.matcher(s);    
s = matcher.replaceAll("");

谢谢。

我用JavaScript测试了以下内容:

[,:;](?![)()
因此,在Java中,这将转换为类似于其中之一的内容

{Punct}(?![)()
\\p{p}(?![)()

我用JavaScript测试了以下内容:

[,:;](?![)()
因此,在Java中,这将转换为类似于其中之一的内容

{Punct}(?![)()
\\p{p}(?![)()

尝试以下方法:

[\p{P}&&[^:()]]|:(?![()])|(?<!:)[()]
?
快速细分:

[\p{P}&&[^:()]]    # any punctuation mark except ':', '(' and ')'
|                  # OR
:(?![()])          # a ':' not followed by '(' or ')'
|                  # OR
(?<!:)[()]         # a '(' or ')' not preceded by ':'
[\p{p}&[^:()]]#除“:”、“(”和“')以外的任何标点符号
|#或
:(?![())#a':'后面不跟'('或')'
|#或
(?

请注意,
[…&&&&[^…]]
(集减法)是Java的正则表达式实现所独有的。请参阅:

尝试以下方法:

[\p{P}&&[^:()]]|:(?![()])|(?<!:)[()]
?
快速细分:

[\p{P}&&[^:()]]    # any punctuation mark except ':', '(' and ')'
|                  # OR
:(?![()])          # a ':' not followed by '(' or ')'
|                  # OR
(?<!:)[()]         # a '(' or ')' not preceded by ':'
[\p{p}&[^:()]]#除“:”、“(”和“')以外的任何标点符号
|#或
:(?![())#a':'后面不跟'('或')'
|#或
(?
请注意,
[…&&&&[^…]]
(集减法)是Java的正则表达式实现所独有的。请参阅:

,您可以尝试以下方法:

    String s = ":,...:(..:::))How are you today?..:( ";  
    Pattern pattern = Pattern.compile("(:\\)|:\\(|[^\\p{Punct}]+|\\s+)");  
    Matcher matcher = pattern.matcher(s); 
    String res="";
    while(matcher.find()){
        res+=matcher.group(0);
    }
    System.out.println(res);
结果

:(:)你今天好吗(

您可以尝试以下方法:

    String s = ":,...:(..:::))How are you today?..:( ";  
    Pattern pattern = Pattern.compile("(:\\)|:\\(|[^\\p{Punct}]+|\\s+)");  
    Matcher matcher = pattern.matcher(s); 
    String res="";
    while(matcher.find()){
        res+=matcher.group(0);
    }
    System.out.println(res);
结果

:(:)你今天好吗(


您如何区分作为消息一部分的标点符号和作为噪声的标点符号?(例如,您的示例中的“?”)可能重复的OOps我在问题中犯了一个错误。输出不应该有“?”。谢谢。我只需要保留表情符号,如:)或:(并过滤掉其他标点…@pst(\\p{p}+)删除所有标点符号并(\\Q:)\\E |\\Q:(\\E)选择笑脸符号。因此,我尝试选择并替换不是笑脸符号且是标点符号的字符。如何区分作为消息一部分的标点符号和噪声的标点符号?(例如,示例中的“?”)可能重复OOps我在问题中犯了一个错误。输出不应该有“?”。谢谢。我只需要保留像:)或:(并过滤掉其他标点符号…@pst(\\p{p}+)删除所有标点符号和(\\Q:)\\E|\\Q:(\\E)选择表情符号。因此我尝试选择并替换不是表情符号的字符和标点符号。这将在
:)中留下第二个
,在
:)中留下第二个
谢谢!!有趣的方法!谢谢!!有趣的方法!