Регулярное выражение для разделения строковых значений перед подчеркиванием с помощью ANT - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть имена папок с соглашением, как показано ниже:

 org.apache.commons.httpclient_3.1.0.v20170718_1537

 org.apache.commons.httpclient_3.1.0.v20170718-1537

 org.apache.james.mime4j_0.6.0.v20120423

В них я хотел разделить имена без названий версий. (** Пример: ** org.apache.commons.httpclient_3.1.0.v20170718_1537 должен быть упомянут как org.apache.commons.httpclient)

               <propertyregex property="MyRegex"
                           input="@{MyFolder}"
                           regexp="_(.*)"
                           select="\0"
                           casesensitive="false" />

Я хотел отделить имя, используя ANT Итак, я пробовал регулярное выражение типа «_ (. *)» (Я пробовал и с некоторыми другими выражениями регулярного выражения, что тоже не получается), но оно разделяется после подчеркивания и значений перед подчеркиванием, которые я не смог получить.

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

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

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Если вы хотите регулярное выражение - пожалуйста, используйте эту

(.*?)_(.*)

Демо здесь

Но в вашем случае проблема в группе, которую вы выбираете

   <propertyregex property="MyRegex"
                           input="@{MyFolder}"
                           regexp="(.*?)_(.*)"
                           select="\1"
                           casesensitive="false" />
0 голосов
/ 23 сентября 2018

Если вы не хотите возиться с регулярным выражением, вы можете использовать задачу сценария со встроенным движком javascript, например:

<project>
  <property name="foo" value="org.apache.commons.httpclient_3.1.0.v20170718_1537"/>

    <script language="javascript">
      project.setProperty('whatever', project.getProperty('foo').split('_')[0]);
    </script>

    <echo>$${whatever} => ${whatever}</echo>
</project>

Если вы регулярно используете сценарии, то задача groovy antрекомендуется - см. Groovy-скрипты в Ant: использовать задачу-скрипт или Groovy-задачу?

0 голосов
/ 14 сентября 2018

Ваше регулярное выражение _(.*) соответствует подчеркиванию и захватывает в группе захвата любой символ ноль или более раз.

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

В замене используйте пустую строку.

_.*$

Regex demo

<propertyregex property="MyRegex"
input="@{MyFolder}"
regexp="_.*$"
casesensitive="false"
replace=""/>

Или совпадение сначало строки ^ не подчеркивание один или несколько раз с использованием отрицательного класса символов [^_]+

^[^_]+

Regex demo

<propertyregex property="MyRegex"
input="@{MyFolder}"
regexp="^[^_]+"
select="\0"
casesensitive="false" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...