我需要删除Twitter消息中找到的所有URL.我有一个包含大约200,000条此类消息的文件,因此速度至关重要!为此,我使用Java作为编程语言,这是我的代码示例:
public String performStrip(){
String tweet = this.getRawTweet();
String urlPattern = "((https?|http)://(bit\\.ly|t\\.co|lnkd\\.in|tcrn\\.ch)\\S*)\\b";
Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(tweet);
int i = 0;
while (m.find()) {
tweet = tweet.replaceAll(m.group(i),"").trim();
i++;
}
return tweet;
}
Run Code Online (Sandbox Code Playgroud)
这适用于以下情况:
http://t.co/nhWp9hldEH -> (empty string)
http://t.co/nhWp9hldEH" -> "
http://t.co/nhWp9hldEH)aaa" -> aaa"
aaa(http://t.co/nhWp9hldEH" -> aaa("
aaa(http://t.co/nhWp9hldEH)" -> aaa()"
Run Code Online (Sandbox Code Playgroud)
但是,当我得到一个案例如下:
http://t.co/nhWp9hldEH)aaa"
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 21
Run Code Online (Sandbox Code Playgroud)
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.compile(Pattern.java:1669)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.replaceAll(String.java:2210)
at com.anturo.preprocess.url.UrlStripper.performStrip(UrlStripper.java:47)
at com.anturo.preprocess.testing.ReadIn.<init>(ReadIn.java:35)
at com.anturo.preprocess.testing.Main.main(Main.java:6)
Run Code Online (Sandbox Code Playgroud)
我已经查看过有关此错误的多个类似问题,但到目前为止还没有任何工作...希望有人可以帮助我.
问题是您可能在URL中有正则表达式特殊字符,如您所见.
简短解决方案:使用Pattern.quote().您的代码将是:
tweet = tweet.replaceAll(Pattern.quote(m.group(i)),"").trim();
Run Code Online (Sandbox Code Playgroud)
注意:仅在JDK 1.5之后可用,但您确实使用此更好或更好,对吧?
另一种解决方案是简单地使用.replace():
tweet = tweet.replace(m.group(i), "").trim();
Run Code Online (Sandbox Code Playgroud)
与其名称所暗示的不同.replaceAll(),.replace() 确实取代了所有事件; 它只是将正则表达式作为替换字符串.另见.replaceFirst().
最后但同样重要的是,你似乎在滥用.group()!你的循环应该是:
while (m.find())
tweet = tweet.replace(m.group(), "").trim();
Run Code Online (Sandbox Code Playgroud)
i这里不需要变量; m.group(i)将在一场比赛中返回i正则表达式中捕获组所匹配的内容.
| 归档时间: |
|
| 查看次数: |
4490 次 |
| 最近记录: |