Regex匹配包含Dot的单词

时间:2016-06-11 10:53:24

标签: java regex

我有一个问题我有这个句子例如:

(?i)\b(ca\.)\b

而我只想匹配单身“ca”。

我的RegEx就是这样:

testSource.replaceAll()

但这不起作用,我不知道为什么。有任何想法吗 ?

//更新

我最喜欢的是:

pattern.matcher(testSource).replaceAll().

partial class MyView : UIView
    {
        public MyView (IntPtr handle) : base (handle)
        {    
        }

        public static MyView Create()
        {    
            var arr = NSBundle.MainBundle.LoadNib ("MyView", null, null);
            var v = arr.GetItem<MyView>(0);

            return v;
        }
    }
两个都不起作用。

2 个答案:

答案 0 :(得分:3)

你必须逃避点并断言一个非单词:

(?i)\bca\.(?=\W)

请参阅live demo

答案 1 :(得分:2)

您应该像这样使用它:

Pattern.compile("(?i)\\b(ca\\.)(?=\\W)").matcher(a).replaceAll("SOME TEXT");

如果省略java转义,则给出正则表达式:(?i)\b(ca\.)\W

普通正则表达式中的每个\都必须在java中进行转义 - \\

此外,在单词之前有单词边界(\b),但它仅适用于String中从空格到字母数字字符或其他方式的部分。但在你的情况下,你有一个点,这不是一个字母数字字符,所以你最后不能使用\b。您可以使用\W,这意味着点后面有一个非单词字符。但要使用\W,您需要在捕获组中忽略它(因此不会被替换) - (?=

另一个问题是你使用.,它匹配任何角色,但你实际上想要匹配真正的点,所以要做到这一点你必须逃避它 - \.,在java String中变为\\.