2016-07-26 2 views
-4

Я занимаюсь поиском и заменой в Notepad ++, и я ищу регулярное выражение, которое буквально даст мне первый ( в данной строке, поэтому я могу заменить Это.Regex - сопоставить первое вхождение внутри строки, ничего не возвращать

Меня не интересуют никакие предыдущие или последующие символы, буквально только первые (.

Пример строка:

"starLan(11), -- Deprecated via RFC3635 ethernetCsmacd (6) should be used instead 

Я хотел бы, чтобы найти первый ( (около starLan(11) в данном случае), так что я могу заменить этот символ с чем-то другим.

Это не должно соответствовать ни одному другому ( в той же строке, так что в этом случае он не должен совпадать со вторым ( рядом с (6).

Все примеры, с которыми я столкнулся, похоже, возвращают все до и в том числе заданный персонаж, который не является тем, что мне нужно в этом случае.

+0

Итак, почему * возвращение все, вплоть до данного CHARACT er * проблема? Вы слышали о группах захвата и обратных ссылках? –

+0

У меня нет, может быть, это может быть проще, вы можете объяснить дальше? – cogumel0

+0

Это так просто, что вы можете видеть 2 ответа и многое другое, я думаю. –

ответ

1

Я бы соответствовать следующему шаблону:

^([^(]*)\((.*)$ 

И заменить его следующим образом:

\1X\2 

Где X это текст, который вы хотите заменить ( с.

Он использует обратные ссылки для обозначения деталей до и после первого (.


Edit: как уже упоминалось, OP, соответствующие ^([^(]*)\( и заменяя \1X достаточно.

+0

Может быть упрощено до '^ ([^ (] *) \ (' и заменить часть на '\ 1X', но отлично работает. Спасибо! – cogumel0

+0

Действительно, я боялся, что замена все может заменить несколько вхождений в строку , но ведущий '^' запрещает это. – Aaron

-1

вы можете использовать этот

^(.*?)\(

текст захваченный внутри() будет доступен в задней ссылке $ 1. так что вы можете заменить его любит:

$1someText 

где SOMETEXT является текстом, который вы хотите поставить на месте удалено «(»

, если вы хотите, чтобы текст после удален «(» оставаться нетронутым, а также, вы можете использовать:

^(.*?)\((.*) 

и замену как:

$1someText$2 
+0

Это соответствует последнему '(' в строке – cogumel0

+0

@ cogumel0 [пожалуйста, проверьте это] (https://regex101.com/r/tC8nB7/3), и я просто проверил его в notepad ++ тоже. Не могли бы вы опубликовать какую-либо ссылку, чтобы показать, что она не работает? –

+0

Я обновил предыдущую ссылку, чтобы показать совпадение с моим ответом на текст после удаления '('. Кажется, что он работает тоже: как в regex101, так и в блокноте ++. if вы можете проверить, что он работает, пожалуйста, любезно удалите нижний предел. –

Смежные вопросы