Regex для сопоставления и замены "<" и ">" - PullRequest
0 голосов
/ 25 мая 2019

Мне нужно разбить следующее на несколько токенов в кадре данных Spark Scala. Я не использовал регулярные выражения намного раньше. Любая помощь или направление было бы хорошо.

<c#><floating-point><type-conversion><double><decimal>

Ожидаемый результат (каждый токен в отдельной строке):

c#
floating-point
type-conversion
double
decimal

Я попробовал <(.*?)>, но он дает мне следующие результаты. Как я могу игнорировать теги

c#
<c#>
floating-point
<floating-point>
type-conversion
<type-conversion>
double
<double>
decimal
<decimal>

Ответы [ 2 ]

1 голос
/ 26 мая 2019

Здесь мы могли бы просто спроектировать выражение для захвата <> и заменить его новыми строками, возможно, это сработает:

(?:\<|\>)

Демо

const regex = /(?:\<|\>)/gm;
const str = `<c#><floating-point><type-conversion><double><decimal>`;
const subst = `\n`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

enter image description here

1 голос
/ 25 мая 2019

Применение утверждений lookahead и lookbehind должно помочь:

scala> val pattern = "(?<=<)(.*?)(?=>)".r
pattern: scala.util.matching.Regex = (?<=<)(.*?)(?=>)

scala> val s= "<c#><floating-point><type-conversion><double><decimal>"
s: String = <c#><floating-point><type-conversion><double><decimal>

scala> for { m <- pattern.findAllIn(s) } println(m)
c#
floating-point
type-conversion
double
decimal
...