я пытаюсь добавить перед каждым словом, у которого нет начала [string]:
, чтобы иметь Line:
в начале, поэтому я сделал это регулярное выражение ^(?![^:]+:)
https://regex101.com/r/oMF8ks/1
а если я напишу
1
2
3
он возвращает то, что я хочу ожидать
Line:1
Line:2
Line:3
и для
Line:1
Line:2
Line:3
он возвращается так же, как и хотел
но моя проблема, когда я пытаюсь применить его к https://regex101.com/r/K0z3bc/1
1 : A
2 : B
3 : C
Я ожидал
Line:1 : A
Line:2 : B
Line:3 : C
но я только получил
1 : A
2 : B
3 : C
но когда я изменяю регулярное выражение на ^(?!Line:)
https://regex101.com/r/49i9tQ/1, оно работает, но я хочу, чтобы оно работало для всех слов, а не только Line
@designer132 это не сработает для таких строк, как 1:A
Ты можешь использовать
^([^:\s]++)(?!:)
и заменить на Line:$1
.
См. демонстрация регулярных выражений. Подробности:
^
- начало строки([^:\s]++)
- Группа 1: один или несколько символов, отличных от :
и пробела (притяжательный квантификатор предотвращает возврат в шаблон [^:\s]
и, таким образом, предотвращает частичное совпадение, если двоеточие присутствует дальше в строке)(?!:)
- сразу после двоеточия не следует.Вы также можете опустить группу, а затем использовать ^[^:\s]++(?!:)
и заменить на Line:$0
. См. эта демонстрация регулярных выражений.
нет ли способа проверить, запускается ли он только один раз по этому правилу ([a-z]+:)
так же, как (Line:)
- потому что :
может быть ::
или :::
, поэтому я бы использовал ([a-z]+:::)
@yvgwxgtyowvaiqndwo Вы имеете в виду ^[A-Za-z0-9]++(?!:)
?
Шаблон, который вы пробовали ^(?![^:]+:)
, означает: утверждать, что справа от текущей позиции нет 1 или более символов, отличных от :
, а затем сопоставлять :
Вы не получите подходящей замены для таких строк, как 1 : A
, потому что инвертированный класс символов [^:]
также соответствует символу пробела.
Вы также можете исключить совпадающие пробельные символы:
^(?![^:\s]+:)
См. замены в демонстрация регулярного выражения101.
^(?![^\s:]+:)