0

我对 perl 风格的正则表达式非常陌生。有人可以建议我在管道句子中获得第n 个单词吗?

句子:

ab|gf|fdg|hjtyt|ew|gf|jh|edf|gfd|fd|fd|jvf|df|ds|s|gf

我想在这里第四个字hjtyt

我正在使用一个工具,我只能放置 perl 样式的正则表达式,所以我只寻找一个正则表达式解决方案。

4

2 回答 2

3

我不会为此使用正则表达式。在 Python 中:

>>> s = "ab|gf|fdg|hjtyt|ew|gf|jh|edf|gfd|fd|fd|jvf|df|ds|s|gf"
>>> s.split("|")[3]
'hjtyt'

但如果你坚持:

>>> import re
>>> re.search(r"^(?:[^|]*\|){3}([^|]*)", s).group(1)
'hjtyt'

解释:

^       # Start of string
(?:     # Match...
 [^|]*  # Any number of characters except pipes,
 \|     # followed by a pipe,
){3}    # repeated three times.
(       # Match and capture into group number 1:
 [^|]*  # Any number of characters except pipes.
)       # End of capturing group number 1
于 2013-04-12T05:49:12.003 回答
1

在 perl 中使用自动拆分:

> echo "ab|gf|fdg|hjtyt|ew|gf|jh" | perl -F"\|" -lane 'print $F[3]'
hjtyt
>
于 2013-04-12T07:04:16.923 回答