Regex 用于获取各种标记(包括连字符)的正则表达式

Regex 用于获取各种标记(包括连字符)的正则表达式,regex,c#-4.0,split,nlp,Regex,C# 4.0,Split,Nlp,我想把一个句子分成单词和特殊字符。我正在使用下面的正则表达式: @"((\b[^\s]+\b)((?<=\.\w).)?) @”((\b[^\s]+\b)((?听起来好像可以满足您的需求: @"\b\s?([A-Za-z-]+)\s?\b" 对于您一直在尝试的正则表达式来说,似乎有点太简单了!可能还有其他原因吗?可能使用如下模式进行拆分: @"\s+(?:\p{P}(?!\s))?|\b\p{P}+\s*" 以防万一,您需要一种非正则表达式的方法来删除句子中的标点符号,并且仍然保留h

我想把一个句子分成单词和特殊字符。我正在使用下面的正则表达式:

@"((\b[^\s]+\b)((?<=\.\w).)?)
@”((\b[^\s]+\b)((?听起来好像可以满足您的需求:

@"\b\s?([A-Za-z-]+)\s?\b"

对于您一直在尝试的正则表达式来说,似乎有点太简单了!可能还有其他原因吗?

可能使用如下模式进行拆分:

@"\s+(?:\p{P}(?!\s))?|\b\p{P}+\s*"

以防万一,您需要一种非正则表达式的方法来删除句子中的标点符号,并且仍然保留hypen:

import string
s = '"Right now!" she shouted, and hands fluttered in the air - amid a few cheers - for about two minutes.'
x = "".join([c for c in s if c =="-" or c not in string.punctuation])
产出:

'Right now she shouted and hands fluttered in the air - amid a few cheers - for about two minutes'

只需使用
x.split()
即可将其标记化为所需的输出。

不仅仅是单个标记,也没有直接附加到单词的字符。顺便说一句,这是一个匹配项!Casimir的split regex似乎可以做到这一点(还没有测试过),不过我会在开头加上一个插入符号,以免得到第一个引号
(?:\s+| ^)(?:\p{p}(?!\s))?\b\p{p}+\s*
。实际上,@“\b\s?[A-Za-z-]+\s?\b”也会在一些单词后呈现一个空格(在上面的示例中,除了“now”、“Howled”、“air”、“cheers”和“minutes”之外的每个单词后面)。如何避免?它也不会给我冒号和其他空格分隔字符。@aceBox你的意思是如果你有
这是一个句子:不是短语。
,你应该得到
一个
句子
不是
一个
短语
?(由于某种原因,当我把括号放在链接中时,我忘了把括号放在我的答案中,这会阻止空格的捕获。哎呀,解决了这个问题。
'Right now she shouted and hands fluttered in the air - amid a few cheers - for about two minutes'