Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 是否存在不匹配仅包含a-Z,0-9的单词的正则表达式/&引用&引用-&引用;及"&引用;文本字符串?_Regex - Fatal编程技术网

Regex 是否存在不匹配仅包含a-Z,0-9的单词的正则表达式/&引用&引用-&引用;及"&引用;文本字符串?

Regex 是否存在不匹配仅包含a-Z,0-9的单词的正则表达式/&引用&引用-&引用;及"&引用;文本字符串?,regex,Regex,尝试不匹配具有5个或更多字符且文本字符串中仅包含A-Z、0-9、“/”、“-”和“.”的单词 尝试了一百万个不同的正则表达式。我现在使用的是: (?这似乎有效。如果您指定正在使用的语言,这将非常有用。这是Java。如果模式存在于字符串的开头,它只会删除模式 String[] test = { "Test ABC123 Test", "ABC123 Test", "Test ABC123", "Test ABC-123 Test", "ABC-123 Test", "Test AB

尝试不匹配具有5个或更多字符且文本字符串中仅包含A-Z、0-9、“/”、“-”和“.”的单词

尝试了一百万个不同的正则表达式。我现在使用的是:


(?这似乎有效。如果您指定正在使用的语言,这将非常有用。这是Java。如果模式存在于字符串的开头,它只会删除模式

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("---------------------------");
}

这将查找正则表达式
^[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
这起到了作用:

(?<=^[A-Z0-9/.-]{5,}\s).*

(?关于
^\S{5,}?
?您说您正在使用一个可变长度的lookback断言吗?“因为正则表达式没有完全标准化,所以带有此标记的所有问题还应该包括一个指定适用编程语言或工具的标记。”您之所以得到这些结果,是因为您正在使用正向查找
(?我不是说字符串可能有换行符,而是
(*))
将不会匹配行的其余部分(如果有),除非您使用了
模式.DOTALL
标志。实际上,我使用模式的方式确实匹配,因为它只找到了匹配的一个或多个实例。因此换行符不相关。如果我匹配的是完整的字符串,您将是正确的。实际上,如果没有newline字符我认为您将匹配整个字符串,并将其替换为所有非
[A-Z0-9/-]{5,}\s
。但如果有换行符,则您将匹配所有内容,但不包括该换行符,因此它最终仍能正常工作。若要了解我所说的内容,请将
“$1”
替换为
,看看你最终会得到什么。
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
(?<=^[A-Z0-9/.-]{5,}\s).*