我有一个Java应用程序可以传输Twitter数据。
假设我有一个String text = tweet.getText()
变量。
在文字中,我们可以有一个或多个@MentionedUser
。我不仅要删除@
,还要删除用户名。
如何使用replaceAll
并且不触及字符串的其余部分来执行此操作?
谢谢。
答案 0 :(得分:2)
我想使用(^|\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
详细信息:
(^|\s)
匹配^
字符串的开头或|
空格\s
@\w+
匹配@后跟一个或多个单词字符,相当于[A-Za-z0-9_]
($|\s)
匹配$
字符串结尾或|
空格\s
如果你想更深入地指定twitter用户名的正确语法我读了这个article here,他们提到了一些有用的信息:
您的用户名不能超过
15 characters
。您的姓名可以更长(50个字符),但用户名可以缩短 为了方便起见。用户名只能包含字母数字字符(字母
A-Z
,数字0-9
),但下划线除外,如上所述。 ...
根据这条规则,您也可以使用此正则表达式:
(?i)(^|\s)@[a-z0-9_]{1,15}($|\s)
答案 1 :(得分:1)
这是一种替代方案,它不会产生双倍的空格,也不会捕获电子邮件:
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+|$)
的部分说明: