Regex 使用正则表达式解析数据

Regex 使用正则表达式解析数据,regex,Regex,我在使用正则表达式提取数据时遇到了问题,通常我可以很容易地做到,但我发现自己被困在了这里。我试图提取“n”之后和“end”之前的部分 我能得到的数据是 jack. n n klln kjj kll end jane. n n kien wsdn end jone. n losn djs end jord. n sdjn sdkln end 现在“n”只能出现一到两次 我用这个提取了3美元 \(.+?\.) .*n.* (n|\s) (.*)

我在使用正则表达式提取数据时遇到了问题,通常我可以很容易地做到,但我发现自己被困在了这里。我试图提取“n”之后和“end”之前的部分

我能得到的数据是

 jack.   n n klln kjj kll end
 jane.      n    n kien wsdn end
 jone.      n losn djs end
 jord.   n      sdjn sdkln end
现在“n”只能出现一到两次

我用这个提取了3美元

\(.+?\.) .*n.* (n|\s) (.*) end\
它适用于所有实例,但不适用于第3行。它所做的是,它还包括“losn”。
在所有情况下,都可能出现两个“n”或一个“n”。如果存在一个“n”,则“n”可以是远离我想要的数据的空间。或者很多空间之外。

好的,没关系,我想我做到了

我改变了:

  \(.+?\.) .*n.* (n|\s) (.*) end\
至(添加“?”以使辅助“n”可选):


我认为如果你用这样的东西来代替,会更安全:

^[^.]+\.\s*n(?:\s*n)?\s* (.*) end
使用
匹配“任意字符”可能会导致效率问题。因此,我建议对第一部分使用
[^.]+
(或者如果第一部分也可以包含句点,
+?

然后使用
\s*
而不是
\s*
并使用可选组
(?:\s*n)?
作为可能的第二个
n

^[^.]+\.\s*n(?:\s*n)?\s* (.*) end