поиск и замена

Russian main discussion
  • Author
  • Message
Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

это что, киберспорт такой - писать на двух языках одновременно, а не поочередно?
Зачем придираешься, что человек знает, на том и хочет писать.
klopus
поскольку скрипт на JS, функция тоже должна быть на JS. Но это не страшно, ты лучше опиши, что она должна делать.

Offline
Posts: 5
Joined: Sun Apr 21, 2013 10:52 am

Post by klopus »

Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
начал с этого и замены не произошло :(

Offline
Posts: 5
Joined: Sun Apr 21, 2013 10:52 am

Post by klopus »

KDJ wrote:klopus
Replace dialog.

Simply, without regular expressions:
What: <Тег>0.354</Тег>
With: <Тег>0.4</Тег>

With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1

This last will replace
<Тег>0.xyz</Тег>
(where x,y,z any digit 0-9)
with
<Тег>0.z</Тег>
not working :(

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

klopus wrote:
Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
начал с этого и замены не произошло :(
Совет рабочий. Проверяйте. Где-то у Вас косяк. Возможно Вы скопипастили шаблоны поиска/замены, но элементарно забыли заменить слово "Тег" из примера на его истинное значение из рабочего текста.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

klopus wrote:
KDJ wrote:klopus
Replace dialog.
...
With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1
...
not working :(
Если речь об этой части (With regular expressions), то тут действительно есть один тонкий момент или, если хотите, "подводный камень"...
Короче говоря, надо жать "Заменить всё", а не "Заменить".

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

klopus wrote:
KDJ wrote:klopus
Replace dialog.

Simply, without regular expressions:
What: <Тег>0.354</Тег>
With: <Тег>0.4</Тег>

With regular expressions:
What: (?<=<Тег>0\.)\d\d(\d)(?=</Тег>)
With: \1

This last will replace
<Тег>0.xyz</Тег>
(where x,y,z any digit 0-9)
with
<Тег>0.z</Тег>
not working :(
For me it works properly.
For this regular expression is required AkelPad version 4.8.2.
Or maybe you badly copied the regular expression. Should be no leading or trailing spaces.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
Если же надо именно округлять числа, то поможет скрипт SearchReplace, там можно ставить собственную JS-функцию в качестве замены.
Исходя из предположения, что речь действительно идет об округлении значений определенного тега до одного знака после запятой, можно предложить вот что (в качестве предварительного наброска):
Запустить скрипт SearchReplace.js
Что: (<Тег>)(\d+\.\d+)(</Тег>)
Чем: var x = Math.round(parseFloat($2)*10)/10; return $1 + x.toString(10) + $3;

галки на "Регулярные выражения" и "Заменять на функцию".
По моему разумению, средняя часть должна брать все неотрицательные числа с дробной частью.
Функция написана по образу и подобию той, что идет в примере к скрипту SearchReplace.js

Offline
Posts: 5
Joined: Sun Apr 21, 2013 10:52 am

Post by klopus »

opk44 wrote:
Fr0sT wrote:Регулярки включить,
Что: <Тег>0.35\d</Тег> Чем: <Тег>0.4</Тег>
Если же надо именно округлять числа, то поможет скрипт SearchReplace, там можно ставить собственную JS-функцию в качестве замены.
Исходя из предположения, что речь действительно идет об округлении значений определенного тега до одного знака после запятой, можно предложить вот что (в качестве предварительного наброска):
Запустить скрипт SearchReplace.js
Что: (<Тег>)(\d+\.\d+)(</Тег>)
Чем: var x = Math.round(parseFloat($2)*10)/10; return $1 + x.toString(10) + $3;

галки на "Регулярные выражения" и "Заменять на функцию".
По моему разумению, средняя часть должна брать все неотрицательные числа с дробной частью.
Функция написана по образу и подобию той, что идет в примере к скрипту SearchReplace.js
на самом деле округление было не целью, но и так получилось хорошо :) Спасибо всем за помощь!

Offline
Posts: 24
Joined: Tue Nov 13, 2007 5:55 am
Location: Voronezh
Contact:

Post by saym101 »

Не получилось сделать замену с регулярными выражениями -
Делаем replace с включёнными regular expressions. Заменяем %^(*^)/i на $^1 Эта операция заменяет /i в конце строки на символ $ в начала строки.

Code: Select all

1000-километровой=<тысячекилометро<вой> /i
1000-лепестковым=<тысячелепестко<вым> /i
100-кубовой=<100-кубо<вой> /i
10-километровый=<десяти-километровый> /i
110-метровую=<стодесятиметро<вую> /i 
должно

Code: Select all

$1000-километровой=<тысячекилометро<вой>
$1000-лепестковым=<тысячелепестко<вым>
$100-кубовой=<100-кубо<вой>
$10-километровый=<десяти-километровый>
$110-метровую=<стодесятиметро<вую> 

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

saym101
What: ^(.+) /i$
With: $\1

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

saym101 wrote:Не получилось сделать замену с регулярными выражениями...
Можно было и без регулярок обойтись, просто "по рабоче-крестьянски".
Что: /i\n
Чем: \n$
(с галочкой на Esc-последовательностях)

Но у такого способа два маленьких недостатка: 1) первая и последняя строки потребуют ручной коррекции; 2) если на концах строк после "/i" есть пробелы, то сначала придется сделать RTRIM (выделить весь текст CTRL+A, затем ALT+BACKSPACE) и только потом выполнять замену.

Offline
Posts: 4
Joined: Sun May 12, 2013 8:56 am

Post by bayzhanov »

Подскажите как с помощью регулярных выражений в тексте формата:
X-65.062Y-0.041Z63.402
X-64.71Y-0.116Z63.533
X-64.35Y-0.194Z63.635
X-63.617Y-0.351Z63.785
X-63.249Y-0.43Z63.856
Найти:
1.Минимальный/максимальный X/Y/Z?

Заменить:
1.Увеличить значение иксов на пять например X-65.062 > X-60.062 ?
2. И в общем случае есть механизмы в регулярных выражениях или других плагинах работы с уравнениями например как в экселе?

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

bayzhanov wrote:Подскажите как с помощью регулярных выражений в тексте формата:
X-65.062Y-0.041Z63.402
X-64.71Y-0.116Z63.533
X-64.35Y-0.194Z63.635
X-63.617Y-0.351Z63.785
X-63.249Y-0.43Z63.856
Найти:
1.Минимальный/максимальный X/Y/Z?
You can use SearchReplace.js script with "Regular expression" and "Replace with function" parameters.
What:

Code: Select all

(X|Y|Z)(-?\d*\.?\d+)
With:

Code: Select all

var n = Number(arguments[2]); var f = arguments.callee; if (arguments[1] == "X") {if (!(f.xL < n)) f.xL = n; if (!(f.xH > n)) f.xH = n;} else if (arguments[1] == "Y") {if (!(f.yL < n)) f.yL = n; if (!(f.yH > n)) f.yH = n;} else if (arguments[1] == "Z") {if (!(f.zL < n)) f.zL = n; if (!(f.zH > n)) f.zH = n;} if (! /(X|Y|Z)(-?\d*\.?\d+)/.test(arguments[arguments.length - 1].substr(arguments[arguments.length - 2] + arguments[0].length))) WScript.Echo("X min=" + f.xL + "\n" + "X max=" + f.xH + "\n" + "Y min=" + f.yL + "\n" + "Y max=" + f.yH + "\n" + "Z min=" + f.zL + "\n" + "Z max=" + f.zH); return arguments[0];
And you should press "Replace all" button.
bayzhanov wrote:Заменить:
1.Увеличить значение иксов на пять например X-65.062 > X-60.062 ?
What: (X)(-?\d*\.?\d+)
With: return arguments[1] + (Number(arguments[2]) + 5).toFixed(3);

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

bayzhanov wrote:...
2. И в общем случае есть механизмы в регулярных выражениях или других плагинах работы с уравнениями например как в экселе?
Можно попробовать плагин Scripts (поддержка JScript/VBScript). Распарсить текст в массив и с элементами уже играться как нужно.
Простейший пример (JScript):

Code: Select all

// парсим выделенный текст
var pSelText=AkelPad.GetSelText().split(/X|Y|Z|\r/);
// шоу и арифметика
for (i = 0; i < pSelText.length; ++i) 
    {
      WScript.Echo(pSelText[i]);
      WScript.Echo(parseFloat(pSelText[i])+5);
    }

Offline
Posts: 5
Joined: Wed May 15, 2013 6:38 pm

Автозамена

Post by Jumperbest »

Всем Здравствуйте. Умоляю помогите нависать скрипт авто замены что бы

<item value=" просто удялялось
"><text> менялось на пробел и "
</text></item> меняось на "

В результати из такого
<item value="7"><text>Луганск</text></item>
превращалось в такое
7 "Луганск"

И все это делалось нажатием(по возможности одной кнопки).

Помогите пожалуйста начинающиму прогиру )
Post Reply