我正在处理一个包含大约1000万个文件的语料库。某些文件的网址中包含反斜杠(' \')。我想替换那些文件中的所有URL。以下工作正常,直到找到包含反斜杠的URL。
public static String removeUrl(String str)
{
String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure):((//)|(\\\\))[\\w\\d:#@%/;$~_?\\+-=\\\\\\.&]*)";
Pattern p = Pattern.compile(urlPattern, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
while (str!=null && m.find()) {
str = str.replaceAll(m.group(0)," ").trim(); // ERROR is occuring here when m.group(0) has URL with '\'
}
return str;
}
任何帮助?
答案 0 :(得分:0)
它与逃避反斜杠有关:
removeUrl("http://go.com\\")
不会抛出错误,但str.replaceAll("\\\\", "");
会错误。您可能必须在替换All之前操纵字符串,例如str.replaceAll("\\", "");
。
此外,只有str.replace("\\", "");
而非openerp.zip_widget = function(instance) {
var _t = instance.web._t,
_lt = instance.web._lt;
var QWeb = instance.web.qweb;
var fields; // <-- Variable to keep the field list
instance.web.form.widgets.add('zip', 'instance.zip_widget.zip_lookup');
instance.zip_widget.zip_lookup = instance.web.form.FieldChar.extend({
template: "zip_widget",
start: function() {
this._super();
fields = this.getParent().fields; // <-- Get the field list
},
修改:刚看到this
答案 1 :(得分:0)
这个正则表达式对我有用。
[a-zA-Z]+:\/\/([a-zA-Z0-9\.\-_])+(:[0-9]+)?([\/\\][a-zA-Z0-9\._\-]*)*(\?(&?[a-zA-Z0-9_\-\.]+=[a-zA-Z0-9_\-\.]+)+)?
它匹配所有这些
http://test.test.test:123/test.test/test?blah=23&bluh=23
http://test.test.test/test.test/?blah=blah
http://ttes-test.comsa234/ase/ase
abc://test.test
abc://test.test:900
abc://test.test/
abc://test.test\
abc://test.test\test
abc://test.test:90/test\test/test
abc://wow/test?this=works&and=worksagain
cde://yay/what/yes.com/hi_there\?param=value¶m=value
withdash://its-dash/another-dash\okay
您可以使用regex101进行测试