用于标记单词和标点符号的正则表达式
regex for tokenizing words and punctuation
我一直在使用简单的 \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!"
,因为它检查单词是否正确拆分。
您可以使用 lookarounds 正则表达式来获取:
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
!
做匹配而不是拆分。
[A-Za-z]+|[^\w\s]
(?=\W)|(?<=\W)|\s+
您可以尝试 this.See 演示。
我一直在使用简单的 \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!"
,因为它检查单词是否正确拆分。
您可以使用 lookarounds 正则表达式来获取:
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
!
做匹配而不是拆分。
[A-Za-z]+|[^\w\s]
(?=\W)|(?<=\W)|\s+
您可以尝试 this.See 演示。