2014-12-15 2 views
-1

Учитывая следующую строку:Не принимайте число близко к тексту

 4.2250     T 4.2400   

Если я хочу только первый номер, и вы хотите, чтобы исключить второй из-за своей близости к «Т», как бы я сделать это ?

([^T]\d*\.\d*\s{0,3}) 

Близко, но не идеально.

Я использую vbscript.regexp.

+1

Что определяет близость к 'T'? Разве это просто «разделено пробелами»? Кроме того, как насчет вашего текущего регулярного выражения не является идеальным? –

+0

Текущее текущее регулярное выражение принимает число справа. Я бы хотел, чтобы это проигнорировалось. '\ s +' или "разделенные пробелами" в порядке. Если \ d + \. \ D + имеет пробел, а T слева от него, я не хочу его принимать. –

+0

Если вы хотите только первое число, остановитесь после того, как найдете его. Если вы хотите все цифры, но исключаете некоторые, это другое. – sln

ответ

0

Я предполагаю, что у вас есть способность к скрипту внутри vb. Есть несколько способов, но лучшим способом было бы сидеть в глобальном цикле поиска. Когда вы получаете совпадение для матча в группе захвата 1. Если группа 1 соответствует, возьмите ее значение, если нет, продолжайте, пока не будет больше совпадений.

# (?:T\s{0,5}\d*\.\d*)|(\d*\.\d*) 

    (?:       # Consume a T <space> number, do not take it 
     T \s{0,5} \d* \. \d* 
    ) 
|        # or, 
    (\d* \. \d*)    # (1), Consume a number, take this one 

И это может быть сокращен до

# (T\s{0,5})?(\d*\.\d*) 

(T \s{0,5})?    # (1), A 'T' this number is not valid 
(\d* \. \d*)    # (2), Consume a number, take this one 

Group 2 всегда содержит номер. Если соответствует группа 1, число недействительно.

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