我有行(来自html的解析),可以有两种方式(取决于语言网站):
行格式1:
Roles: Lee Jae Ryong (Im Sang Ok), Hong Eun Hee (Mi Geum (soţia lui Sang Ok)) Credits: Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
第2行格式:
Role(s): Lee Jae Ryong (Im Sang Ok), Hong Eun Hee (Mi Geum (soţia lui Sang Ok)) Credit(s): Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
我想用perl分割这一行,具体取决于它的格式:
Roles: Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
Credits: Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
或:
Role(s): Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
Credit(s): Lee Jae Ryong (Im Sang Ok) Hong Eun Hee (Mi Geum (soţia lui Sang Ok))
答案 0 :(得分:0)
有多种方法可以做到这一点(像往常一样,在perl中)。一种方法是使用如下的正则表达式:
(Credit.*?:) (.*?\)) (.*)
在行动here中查看。这基本上是将字符串分为三部分,其中:
(Credit.*?:)
以Credit
开头,以第一个:
字符结束(紧随:
之后的空格被丢弃)(.*?\))
紧跟在第一部分之后的空格之后,以第一个)
字符结束通过更新的问题,它更容易:
(Role.*?) (Credit.*)
在行动here中查看:
答案 1 :(得分:0)
怎么样:
split /(\S*:)/, $string;
答案 2 :(得分:0)
看起来你想要一个0宽的前瞻((?=...)
下面)
split /(?=Credit[(]?s[)]?:)/
这是一个比它可能更容易的正则表达式。为了简单起见,您可以包含比您想象的更多的案例。它允许Credit(s:
或Credits):
,假设您不太可能在数据中看到需要区分它们的那些情况。然后,您可能只想包含它们,不想排除包含小错别字的行。
更完整和复杂的规范将是:
split /(?=Credit(?:s|[(]s[)]):)/
也有效。
答案 3 :(得分:0)
这似乎运作良好。当然,额外的冒号可能会搞砸了。
s/\s(\S+:)/ \n$1/;
这只会添加换行符,以便打印工作。如果需要,可以在换行符split /\n/, $string
上拆分字符串,如果你想将它放入一个数组中。