繁体   English   中英

用自定义正则表达式替换Java String

[英]Java String replacement with custom regex

我有一个Java应用程序,可以流Twitter数据。

假设我有一个String text = tweet.getText()变量。

在文本中,我们可以有一个或多个@MentionedUser 我不仅要删除@还要删除用户名。 我该如何使用replaceAll而不接触字符串的其余部分?

谢谢。

我想使用(^|\\s)@\\w+($|\\s)因为您可以在输入中获取电子邮件,例如:

a @twitter username and a simple@email.com another @twitterUserName

因此您可以使用:

String text = "a @twitter username and a simple@email.com another @twitterUserName";
text = text.replaceAll("(^|\\s)@\\w+($|\\s)", "$1$2");
// Output : a  username and a simple@email.com another 

细节 :

  1. (^|\\s)匹配字符串的^开头或| 空间\\s
  2. @\\w+匹配@,后接一个或多个单词字符,等效于[A-Za-z0-9_]
  3. ($|\\s)匹配$字符串结尾或| 空间\\s

如果您想更深入地指定Twitter用户名的正确语法,我在这里阅读了这篇文章,他们提到了一些有用的信息:

  • 您的用户名不能超过15 characters 您的名称可以更长(50个字符),但为了方便起见,用户名应保持较短。

  • 用户名只能包含字母数字字符(字母AZ ,数字0-9 ), 下划线除外,如上所述。 ...

根据此规则,您也可以使用此正则表达式:

(?i)(^|\s)@[a-z0-9_]{1,15}($|\s)

这是一种不产生双倍空格并且也不捕获电子邮件的替代方法:

String str = "a @twitter    @user     username and a john.doe@gmail.com another @twitterUserName @test jane@doe.com";
System.out.println(str.replaceAll("(?<=[^\\w])@[^@\\s]+(\\s+|$)", ""));

输出:

a username and a john.doe@gmail.com another jane@doe.com

实际正则表达式表达式(?<=[^\\w])@[^@\\s]+(\\s+|$)

  1. (?<= [^ \\ w])@ -尝试找到'@'字符,然后回头检查以确保其后没有规则字符(在后面使用零宽度正向查找)。
  2. [^ @ \\ s] + -查找不是'@'或空格字符的内容
  3. (\\ s + | $) -查找多个空格或行尾

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM