我一直用简单的\b
分割来标记英文字符串。但是,给定字符串Hello, "Joe!"
,\b
上的拆分会返回这些令牌:
print join "\n", split /\b/, 'Hello, "Joe!"';
Hello
, "
Joe
!"
我需要单独的标点符号作为单独的标记。我需要的是以下列表:
print join "\n", split /awesome regex here/, 'Hello, "Joe!"';
Hello
,
"
Joe
!
"
我之后可以处理空格,但我想不出一种快速的正则表达式来正确分割字符串。有什么想法吗?
更好的测试用例是"Hello there, Joe!"
,因为它会检查单词是否正确分割。
答案 0 :(得分:1)
您可以使用lookarounds regex来获取此信息:
print join "\n", split /\s+|(?=\p{P})|(?<=\p{P})/, 'Hello, "Joe!"';
<强>输出:强>
Hello
,
"
Joe
!
"
\p{P}
匹配任何标点字符。
示例2:
print join "\n", split /\s+|(?=\p{P})|(?<=\p{P})/, 'hello there, Joe!';
hello
there
,
Joe
!
答案 1 :(得分:1)
匹配而不是拆分。
[A-Za-z]+|[^\w\s]
答案 2 :(得分:1)