pavan patil Ответов: 1

Регулярное выражение для получения строковых значений


Я новичок в регулярных выражениях. И мне нужно регулярное выражение для следующей строки

1) Свойство NodeDisplacements.Dx выходит за пределы допустимого допуска (узел № 49, случай загрузки 1).
Ожидается: 0.2524431049823761 д +/- 0.01 D или 0.2524431049823761 д +/- 2.0 D процентов
Но было: 0.24117276072502136 d

2) Собственность MemberEndForces.Fx выходит за пределы допустимого допуска (Балка № 1, грузовой отсек 1, конец балки EndB).
Ожидается: -1.166001558303833 д +/- 0.001 D или -1.166001558303833 д +/- 2.0 D процентов
Но было: -1.1420921087265015 d

3)Собственность MemberSectionForces.Mz выходит за пределы допустимого допуска (Балка № 33, грузовой отсек 1).
Ожидается: &ЛТ; 60.961132049560547 д 50.785896301269531 д 40.610660552978516 д 30.4354248046875 д 20.260189056396484 д 10.084957122802734 д -0.090282440185546875 д -10.265514373779297 д -20.440753936767578 д -30.615993499755859 д -40.791217803955078 д -50.966464996337891 д -61.141693115234375 д &ГТ; +/- 0.01 D или &ЛТ; 60.961132049560547 д 50.785896301269531 д 40.610660552978516 д 30.4354248046875 д 20.260189056396484 д 10.084957122802734 д -0.090282440185546875 д -10.265514373779297 д -20.440753936767578 д -30.615993499755859 д -40.791217803955078 д -50.966464996337891 д -61.141693115234375 д &ГТ; +/- 3.0 d процентов
Но: &ЛТ; 61.908939361572266 д 51.576515197753906 д 41.244094848632812 д 30.911674499511719 д 20.579250335693359 д 10.246833801269531 д -0.085590362548828125 д -10.418010711669922 д -20.750438690185547 д -31.082859039306641 д -41.415271759033203 д -51.747707366943359 д -62.080116271972656 д &ГТ;

Строковая переменная содержит любое из вышеперечисленных значений.Таким образом,я прочитал номер узла,случай загрузки, ожидаемое и но было значение в 1-м случае. а во 2-м случае номер луча (так как номер узла там отсутствует) и все упомянутое в случае 1. а в 3-м случае нужно прочитать все ожидаемое и но было значение.

Ожидаемый результат:

1) номер узла 49 load case 1 ожидаемый: 0.2524431049823761 допуск:0.01 процент допуска :2.0 но был: 0.24117276072502136

2) Луч номер 1 корпус нагрузки 1 ожидаемый: -1.166001558303833 допуск:0.001 процент допуска :2.0 но был: -1.1420921087265015

3) Балка номер 33 грузовой корпус 1 ожидается: < 60.961132049560547 d, 50.785896301269531 d, 40.610660552978516 d, 30.4354248046875 d, 20.260189056396484 d, 10.084957122802734 d, -0.090282440185546875 d, -10.265514373779297 d, -20.440753936767578 d, -30.615993499755859 D, -40.791217803955078 d, -50.966464996337891 D, -61.141693115234375 d > допуск:0.01 процент допуска : 3.0

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

Что я уже пробовал:

в настоящее время я могу извлечь эти значения с помощью Substring().но нужен любой другой подход, такой как регулярное выражение.

Richard MacCutchan

Регулярное выражение поможет вам найти известные строки или общие шаблоны. Вы уверены, что это то, что вам нужно в данном случае?

pavan patil

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

Richard MacCutchan

Вам нужно сначала найти строку с "номером узла", а затем извлечь два поля, начинающиеся с "ожидалось" и "Но было", за каждым из которых следует число.
Что-то вроде:

IF ISMATCH "Node number"
THEN
   MATCH "Expected: \d" // this returns the substring following Expected
   MATCH "But was: \d"  // dittoEND

Так что, вероятно, так же много работы, как и использование строковых методов.

1 Ответов

Рейтинг:
2

lmoelleb

Есть такой старый анекдот вроде:
У меня есть проблема, и я хочу решить ее с помощью регулярных выражений. Так что теперь у меня две проблемы!

Почему вам нужен другой подход, чем подстрока? Регулярные выражения, безусловно, мощный инструмент, но вы не хотите использовать его, если вы не понимаете его. Если вы просто скопируете некоторые фрагменты, которые вы найдете в Интернете, не понимая их, вы не сможете поддерживать его, и это действительно не даст вам никаких преимуществ.


Так что либо придерживайтесь того, что у вас есть, либо инвестируйте время, чтобы научиться использовать регулярные выражения.

Может быть, попробовать что-то подобное, чтобы узнать (просто нашел его, погуглив "regex tutorial")
RegexOne - изучение регулярных выражений - Урок 1: Введение и Азбука[^]