尝试不匹配具有5个或更多字符且仅包含A-Z,0-9,“ /”,“-”和“”的单词。在文本字符串中。
尝试了一百万种不同的正则表达式。我现在使用的是:
(?<= [A-Z0-9 /.-] {5,} \ s)。*
这实际上还可以,但是当表达式在一行的中间时,我想念表达式前面的文本。
列表:
Test ABC123 Test
ABC123 Test
Test ABC123
Test ABC-123 Test
ABC-123 Test
Test ABC-123
Test ABC/123 Test
ABC/123 Test
Test ABC/123
预期结果:
Test ABC123 Test
Test
Test ABC123
Test ABC-123 Test
Test
Test ABC-123
Test ABC/123 Test
Test
Test ABC/123
基本上,我只想删除表达式,如果它位于字符串的开头。
答案 0 :(得分:1)
这有效:
(?<=^[A-Z0-9/.-]{5,}\s).*
答案 1 :(得分:0)
这似乎有效。如果您指定使用的语言,将很有帮助。这是Java。如果该模式存在于String的开头,它只会删除该模式。
String[] test = {
"Test ABC123 Test", "ABC123 Test", "Test ABC123",
"Test ABC-123 Test", "ABC-123 Test", "Test ABC-123",
"Test ABC/123 Test", "ABC/123 Test", "Test ABC/123"
};
for (String t : test) {
String nt = t.replaceAll("^[A-Z0-9/.-]{5,}\\s(.*)", "$1");
System.out.println("Before: " + t);
System.out.println("After: " + nt);
System.out.println("---------------------------");
}
答案 2 :(得分:0)
这将查找正则表达式^[A-Z0-9/.-]{5,}\s+
,如果找到则将其替换为空字符串。
Python实现:
import re
strings = [
"Test ABC123 Test",
"ABC123 Test",
"Test ABC123",
"Test ABC-123 Test",
"ABC-123 Test",
"Test ABC-123",
"Test ABC/123 Test",
"ABC/123 Test",
"Test ABC/123"
]
regex = re.compile(r'^[A-Z0-9/.-]{5,}\s+')
for string in strings:
print(string, "->", regex.sub("", string))
打印:
Test ABC123 Test -> Test ABC123 Test
ABC123 Test -> Test
Test ABC123 -> Test ABC123
Test ABC-123 Test -> Test ABC-123 Test
ABC-123 Test -> Test
Test ABC-123 -> Test ABC-123
Test ABC/123 Test -> Test ABC/123 Test
ABC/123 Test -> Test
Test ABC/123 -> Test ABC/123