是否有一个正则表达式不匹配仅包含A-Z,0-9,“ /”,“-”和“”的单词。用文本字符串表示?

时间:2019-10-08 14:24:27

标签: regex

尝试不匹配具有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

基本上,我只想删除表达式,如果它位于字符串的开头。

3 个答案:

答案 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