kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 t3rse
t3rse
Вопрос

Regex Отклонение совпадений из-за Instr

Какой самый простой способ сделать функцию типа "instring" с помощью regex? Например, как я могу отбросить всю строку из-за присутствия одного символа, такого как :? Например:

  • this - нормально
  • there:is - не подходит из-за :.

Более практично, как я могу подобрать следующую строку:

//foo/bar/baz[1]/ns:foo2/@attr/text()

для любого теста узла в xpath, который не включает пространство имен?

(/)?(/)([^:/]+) 

Будет соответствовать тестам узла, но включает префикс пространства имен, что делает его ошибочным.

3 2008-08-13T18:18:30+00:00 5
Wayne Burkett
Wayne Burkett
Редактировал вопрос 20-го декабря 2011 в 6:56
Программирование
regex
xpath
 OJ.
OJ.
14-го августа 2008 в 12:13
2008-08-14T00:13:24+00:00
Дополнительно
Источник
Редактировать
#8416799

I' m все еще уверенный, хотели ли Вы просто обнаружить, если Xpath содержит пространство имен, или хотите ли Вы удалить ссылки на пространство имен. Так here' s некоторый типовой кодекс (в C#), который делает обоих.

class Program
{
    static void Main(string[] args)
    {
        string withNamespace = @"//foo/ns2:bar/baz[1]/ns:foo2/@attr/text()";
        string withoutNamespace = @"//foo/bar/baz[1]/foo2/@attr/text()";

        ShowStuff(withNamespace);
        ShowStuff(withoutNamespace);
    }

    static void ShowStuff(string input)
    {
        Console.WriteLine("'{0}' does {1}contain namespaces", input, ContainsNamespace(input) ? "" : "not ");
        Console.WriteLine("'{0}' without namespaces is '{1}'", input, StripNamespaces(input));
    }

    static bool ContainsNamespace(string input)
    {
        // a namspace must start with a character, but can have characters and numbers
        // from that point on.
        return Regex.IsMatch(input, @"/?\w[\w\d]+:\w[\w\d]+/?");
    }

    static string StripNamespaces(string input)
    {
        return Regex.Replace(input, @"(/?)\w[\w\d]+:(\w[\w\d]+)(/?)", "$1$2$3");
    }
}

Надежда, которая помогает! Удача.

Markus Safar
Markus Safar
Редактировал ответ 7-го февраля 2016 в 6:31
2
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Анонимный пользователь
13-го августа 2008 в 6:34
2008-08-13T18:34:59+00:00
Дополнительно
Источник
Редактировать
#8416796

Матч на :? Я думаю, что вопрос не достаточно ясен, потому что ответ настолько очевиден:

if(Regex.Match(":", input)) // reject
1
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Adam Lerman
Adam Lerman
13-го августа 2008 в 6:26
2008-08-13T18:26:34+00:00
Дополнительно
Источник
Редактировать
#8416795

Я не очень хорошо знаю синтаксис regex, но не могли бы вы сделать:

[любой буквенно-цифровой]\*:[любой буквенно-цифровой]\*.

Я думаю, что-то вроде этого должно сработать, нет?

Markus Safar
Markus Safar
Редактировал ответ 7-го февраля 2016 в 6:31
0
0
Mike Stone
Mike Stone
13-го августа 2008 в 6:36
2008-08-13T18:36:02+00:00
Дополнительно
Источник
Редактировать
#8416797

Вам может понадобиться \w, который является "словом". Из javadocs он определяется как [a-zA-Z_0-9], так что если вы не хотите подчеркивания, то это может не сработать.....

0
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 t3rse
t3rse
13-го августа 2008 в 8:21
2008-08-13T20:21:08+00:00
Дополнительно
Источник
Редактировать
#8416798

Да, мой вопрос не был очень ясен. Here' s решение, а скорее, чем единственный проход с regex, я использую разделение и выполняю повторение. Это работает также, но isn' t как изящный:

string xpath = "//foo/bar/baz[1]/ns:foo2/@attr/text()";
string[] nodetests = xpath.Split( new char[] { '/' } );
for (int i = 0; i < nodetests.Length; i++) 
{
    if (nodetests[i].Length > 0 && Regex.IsMatch( nodetests[i], @"^(\w|\[|\])+$" ))
    {
        // does not have a ":", we can manipulate it.
    }
}

xpath = String.Join( "/", nodetests );
Markus Safar
Markus Safar
Редактировал ответ 7-го февраля 2016 в 6:31
0
0
Похожие сообщества 1
Regular Expressions
Regular Expressions
1 085 пользователей
Chat about the Regular Expressions. Please use https://regexr.com https://regex101.com for share your regexes. For practice use: https://regexcrossword.com https://regexone.com
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Александр Македонский
Зарегистрирован 6 дней назад
2
Andrei Kalinin
Зарегистрирован 3 недели назад
3
Koroleva Ego
Зарегистрирован 1 месяц назад
4
Star Lenon
Зарегистрирован 1 месяц назад
5
Данил Жевнеров
Зарегистрирован 2 месяца назад
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией