Java 是否使用正则表达式从字符串中删除可能的序列?
我有一个字符串列表,其中一些(不是全部)有如下结尾:Java 是否使用正则表达式从字符串中删除可能的序列?,java,regex,Java,Regex,我有一个字符串列表,其中一些(不是全部)有如下结尾: "StringSignOut" "String Sign Out" "String SIGNOUT" "StringSO" "String SO" "String S.O." "StringS.O." 我想摆脱所有的注销和SOs,我只是不知道如何做的模式 private static String getGroup(String s, String pat, int g) { Pattern p = Pattern.
"StringSignOut"
"String Sign Out"
"String SIGNOUT"
"StringSO"
"String SO"
"String S.O."
"StringS.O."
我想摆脱所有的注销和SOs,我只是不知道如何做的模式
private static String getGroup(String s, String pat, int g) {
Pattern p = Pattern.compile(pat);
Matcher m = p.matcher(s);
if (m.matches()) {
return m.toMatchResult().group(g);
} else {
return null;
}
}
您可以使用带有多个选择的正则表达式从字符串中删除
SO/signout
示例:
String [] s = { "StringSignOut",
"String Sign Out",
"String SIGNOUT",
"StringSO",
"String SO",
"String S.O.",
"StringS.O."};
for(String s2 : s)
{
System.out.println(s2.replaceAll("SignOut| Sign Out| SIGNOUT|SO| SO| S.O.|S.O.", ""));
}
String
String
String
String
String
String
String
String
String
String
String
String
String
String
结果:
String [] s = { "StringSignOut",
"String Sign Out",
"String SIGNOUT",
"StringSO",
"String SO",
"String S.O.",
"StringS.O."};
for(String s2 : s)
{
System.out.println(s2.replaceAll("SignOut| Sign Out| SIGNOUT|SO| SO| S.O.|S.O.", ""));
}
String
String
String
String
String
String
String
String
String
String
String
String
String
String
您可以使用下面的代码
String [] s = { "StringSignOut",
"String Sign Out",
"String SIGNOUT",
"StringSO",
"String SO",
"String S.O.",
"StringS.O."};
for(String s2 : s)
{
System.out.println(s2.replaceAll("(?i)\\s*(?:sign\\s*out|s\\W*o\\W*)", ""));
}
输出:
String [] s = { "StringSignOut",
"String Sign Out",
"String SIGNOUT",
"StringSO",
"String SO",
"String S.O.",
"StringS.O."};
for(String s2 : s)
{
System.out.println(s2.replaceAll("SignOut| Sign Out| SIGNOUT|SO| SO| S.O.|S.O.", ""));
}
String
String
String
String
String
String
String
String
String
String
String
String
String
String
图案说明:
String [] s = { "StringSignOut",
"String Sign Out",
"String SIGNOUT",
"StringSO",
"String SO",
"String S.O.",
"StringS.O."};
for(String s2 : s)
{
System.out.println(s2.replaceAll("SignOut| Sign Out| SIGNOUT|SO| SO| S.O.|S.O.", ""));
}
String
String
String
String
String
String
String
String
String
String
String
String
String
String
不区分大小写的修饰符(?i)
匹配零个或多个空格字符\s*
非捕获组(?:…)
匹配字符串符号后跟零个或多个空格,然后再后跟字符串sign\s*out
out
逻辑OR运算符|
匹配以下字符串:文本s\W*o\W*
后跟零个或多个非单词字符,然后是文本s
后跟零个或多个非单词字符o
- 这对我来说很有效:
String[] strings = new String[] {"StringSignOut","String Sign Out","String SIGNOUT","StringSO","String SO","String S.O."};
for(String str : strings)
{
System.out.println(str.replaceAll("(?i)(sign\\s*out)|(s\\.?o\\.?)",""));
}
收益率:
String
String
String
String
String
String
输出
String
String
String
String
String
String
String
使用以下命令:
(?:\s*Sign\s*Out|\s*S\W?O\W?)
此处演示:
您能发布预期的输出吗?我希望上面的所有内容都是“字符串”。注销、SO等是否保证在
字符串的末尾?另外,您是否使用“字符串”作为实际数据的占位符?不保证,大多数情况下都是这样。OP注意到,注销
,S.O.
等并不总是在字符串的末尾。在这种情况下,这将无法发挥作用。先生,谢谢你指出这一点。我将从末尾删除$,以便它也开始为您的场景工作。是的!对于你链接到那里的漂亮工具,+1。这非常有效!但我有几个人没有工作(沙漏注销,Lavoy注销,AtlasTruckingS.o.)。我尝试了String companyName=line.replaceAll((?I)(?:\\s*Sign\\s*Out | \\s*s\\W?O\\W?),“”)
使其不区分大小写,但我的可怜字符串“Sore Sign Out”变为“re”。有什么想法吗?我最后做了line=line.replaceAll(“(?I)(?:\\s*Sign\\s*Out)”,”);字符串companyName=line.replaceAll(“(\\s*s\\W?O\\W?),”因为我不确定如何只使“注销”部分不区分大小写。谢谢你的帮助。