Есть ли регулярные выражения, которые не соответствуют словам, содержащим только AZ, 0-9, "/", "-" и "."в текстовых строках? - PullRequest
0 голосов
/ 08 октября 2019

Попытка не соответствовать словам, которые имеют 5 или более символов и содержат только AZ, 0-9, "/", "-" и "."в текстовых строках.

Пробовал миллион разных регулярных выражений. Я использую сейчас:

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

На самом деле это работает довольно хорошо, но япропустить текст перед выражением, когда выражение находится в середине строки.

Список:

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 ]

1 голос
/ 08 октября 2019

Это сработало:

(?<=^[A-Z0-9/.-]{5,}\s).*
0 голосов
/ 08 октября 2019

Это ищет регулярное выражение ^[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
0 голосов
/ 08 октября 2019

Это похоже на работу. Было бы полезно, если бы вы указали язык, который вы используете. Это 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("---------------------------");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...