2016-06-17 2 views
0

я должен линийКак я могу перекрывать две строки в регулярном выражении?

o erl pp ng st i g 

    v a i  r n 

я хочу, чтобы получить

"перекрывание строка"

пожалуйста, помогите мне

я использую Notepad ++

+2

Я не знаю, что вы можете сделать это легко с регулярным выражением. Если вам просто нужно прочитать две строки и объединить результаты. Я бы просто перебирал первую строку (используя массивы или все, что вы выберете) и выводил символ в этой позиции из первой строки, если только это не пробел. Если это пробел, выведите символ в этой же позиции из второй строки (что также может быть пробелом, но это нормально.) –

ответ

2

Описание

Это ISN Это действительно практично, но вот интересный способ сделать это. Если вы знаете длину своей первой строки. И вы знаете, что вторая строка находится на следующей строке, вы можете просто найти каждое пространство и просмотреть символы x, чтобы найти связанный. В вашем примере текста ваша первая строка имеет длину 18 символов, что означает, что символ прямо под пробелом составляет 18 символов, поэтому нам просто нужно заглянуть в будущее, чтобы найти количество символов, чтобы найти тот, о котором идет речь.

(\S)|\s(?=.{18}(.)) 

Regular expression visualization

Если вы использовали $1$2 в качестве замены, то первая строка будет содержать либо не-пробелы из первой строки или символ непосредственно под пробелом.

Примеры

Live Demo

https://regex101.com/r/oT5lZ1/1

Образец текста

o erl pp ng st i g 
v a i  r n 

После замены

overlapping string 
v a i  r n 

Объяснение

NODE      EXPLANATION 
---------------------------------------------------------------------- 
    (      group and capture to \1: 
---------------------------------------------------------------------- 
    \S      non-whitespace (all but \n, \r, \t, \f, 
          and " ") 
---------------------------------------------------------------------- 
)      end of \1 
---------------------------------------------------------------------- 
|      OR 
---------------------------------------------------------------------- 
    \s      whitespace (\n, \r, \t, \f, and " ") 
---------------------------------------------------------------------- 
    (?=      look ahead to see if there is: 
---------------------------------------------------------------------- 
    .{18}     any character (18 times) 
---------------------------------------------------------------------- 
    (      group and capture to \2: 
---------------------------------------------------------------------- 
     .      any character 
---------------------------------------------------------------------- 
    )      end of \2 
---------------------------------------------------------------------- 
)      end of look-ahead 
---------------------------------------------------------------------- 
+0

У меня вопрос, как вы получите это изображение https://www.debuggex.com/ i/DhQJfjTlZ61N8q2R.png –

+0

Создано через [Debuggex.com] (https://www.debuggex.com/r/I61a9uH8imt9QkHc) –

+1

ok благодарит за всех –

2

Как уже говорили другие регулярные выражения не очень подходит к этой проблеме. Но, возможно, вы можете использовать python вместо:

"".join(map(max, zip("o erl pp ng st i g", 
        " v a i  r n "))) 
+0

Я думаю, что ответ Джила будет лучше масштабироваться, если у вас есть доступ к python или аналогичный подход на любом языке. –

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