#java #regex #katalon-studio
Вопрос:
Я боролся с этим и был бы признателен за любую помощь.
У меня есть строка кода, которая всегда выглядит так:
Thread.sleep(1000)
Thread.sleep()
это всегда фиксированная последовательность символов, но целое число внутри является переменным. Как бы я написал регулярное выражение, чтобы уловить это?
Комментарии:
1. Вы хотите получить часть «1000» от
Thread.sleep(1000)
? Целое число внутри является постоянным, а не переменным. 1000 не меняется. В любом случае, какова ваша цель? Мне кажется, это проблема XY.2. У нас есть много строк кода, таких как Thread.sleep(1000) или Thread.sleep(100) или Thread.sleep(2500). Мы написали специальную функцию, чтобы заменить это. Я хочу выполнить поиск регулярных выражений в коде для этих строк и заменить их новой функцией.
3. @user15793316 Было бы еще лучше
Thread.sleeps*(d )
. Это было бы внутри строки Java"Thread\.sleep\s*\(\d \)"
. Иногда перед буквой могут быть пробелы()
.
Ответ №1:
Вы можете использовать регулярное выражение, Threads*.s*sleeps*(s*d s*)
.
Объяснение регулярного выражения:
Thread
: Буквальный,Thread
s*.s*
:.
перед и после 0 пробеловsleeps*
: Литерал,sleep
за которым следует 0 пробелов(s*
: Символ,(
за которым следует 0 пробеловd s*
: Одна или несколько цифр, за которыми следуют символы 0 пробелов.)
: Персонаж,)
ДЕМОНСТРАЦИЯ:
public class Main {
public static void main(String[] args) {
String x = "Some Thread.sleep(1000) text";
x = x.replaceAll("Thread\s*\.\s*sleep\s*\(\s*\d \s*\)", "");
System.out.println(x);
}
}
Выход:
Some text
Комментарии:
1. Так как вы используете
\s*
, вы можете опустить\R?
, чтобы иметь тот же эффект.2. Я бы подумал об уменьшении двойного пробела между словами, но это деталь. Хороший, подробный ответ.