我正试图在每个“。”处拆分一个字符串。要么 ”?”我使用这个正则表达式:
(?<=(?!.[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。使用(?&lt; = [?.])是有效的,所以问题必须在(?!。[0-9])部分,这意味着要排除后跟数字的点。
答案 0 :(得分:4)
使用正则表达式
(?:(?<=[.])(?![0-9])|(?<=[?]))
str.split("(?:(?<=[.])(?![0-9])|(?<=[?]))");
答案 1 :(得分:2)
请记住,在方括号字符类之外,正则表达式中的.
表示任何单个字符。您需要\.
来匹配文字点,这反过来意味着您需要字符串文字中的\\.
。
答案 2 :(得分: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