1

我试图在每个“。”处拆分一个字符串。或者 ”?” 我使用这个正则表达式:

(?<=(?!.[0-9])[?.])

从理论上讲,如果该点后跟一个数字,则代码还可以防止拆分,因此不会拆分诸如 3.000 之类的内容,并且它还包括新字符串中的点。

例如,如果我有这样的文字:“你好。你最喜欢的号码是什么?它是 3.560。” 我想得到这个:“你好。”,“你最喜欢的号码是什么?”,“它是 3.560。”

我在我的电脑上做了一个简单的 java 程序,它的工作方式和我想要的完全一样:

String[] x = c.split("(?<=(?!.[0-9])[?.])");
for(String v : x){
    System.out.println(v);
}

但是,当我在我的 Android 应用程序中使用相同的正则表达式时,它不会拆分任何内容......

x = txt.split("(?<=(?!.[0-9])[?.])");
//This, in my android app, returns an array with only one entry which is the whole string without splitting.

PS。使用 (?<=[?.]) 有效,因此问题必须出在 (?!.[0-9]) 部分,该部分旨在排除后跟数字的点。

4

3 回答 3

4

使用正则表达式模式

(?:(?<=[.])(?![0-9])|(?<=[?]))

str.split("(?:(?<=[.])(?![0-9])|(?<=[?]))");
于 2012-11-18T15:44:20.507 回答
2

请记住,在方括号字符类之外,.在正则表达式中表示任何单个字符。您需要\.匹配一个文字点,这反过来意味着您需要\\.在字符串文字中。

于 2012-11-18T15:30:42.083 回答
1

试试这个。

public class Tester {

    public static void main(String[] args){
        String regex = "[?.][^\\d]";
        String tester = "Testing 3.015 dsd . sd ? sds";
        String[] arr = tester.split(regex);
        for (String s : arr){
            System.out.println(s);
        }
    }

}

输出:

Testing 3.015 dsd 
sd 
sds
于 2012-11-18T15:51:17.340 回答