描述
根据您的评论:A word in this instance is:
a whole word without numbers
doesn't start with a forward slash, or a back slash
just letters only
can include hyphen and apostrophes
根据您的定义,涵盖所有单词字符的字符类将是[a-z'-]+
,并且该组可以被空格或字符串的开头/结尾包围。您的示例还显示了一个逗号,所以我假设一个单词后面可以跟一个逗号或点,其中任何一个都可以跟空格。
这个正则表达式将:
- 收集所有定义为单词的子项
[a-z'-]+
- 允许在单词后使用逗号或点,但不能在单词内部或开头
- 拒绝包含所有连字符的子字符串
- 拒绝包含所有撇号的子字符串
- 防止单词有 3 个或更多连字符
- 防止单词有 2 个或更多撇号
(?:^|\s)(?![\\\/])(?!-+(?:\s|$))(?!'+(?:\s|$))(?!(?:[a-z'-]*?-){3,})(?!(?:[a-z'-]*?'){2,})[a-z'-]+[,.]?(?=\s|$)
扩展解释
(?:^|\s)
匹配字符串的开头或空格。这消除了测试单词边界的需要,这对于像“abdc-egfh”这样的字符串是有问题的
(?![\\\/])
防止单词以 \ 或 / 开头,但是这太过分了,因为字符类也不允许这样做
(?!-+(?:\s|$))
防止都是连字符的字符串
(?!'+(?:\s|$))
防止都是撇号的字符串
(?!(?:[a-z'-]*?-){3,})
防止有 3 个或更多连字符的字符串
(?!(?:[a-z'-]*?'){2,})
防止有 2 个或更多撇号的字符串
[a-z'-]+[,.]?(?=\s|$)
匹配后跟一些可选标点符号的单词,并确保其后跟空格或字符串的结尾
例子
我不是 C# 程序员,而是从代码块返回的匹配数组,如问题中所涵盖的返回数组/列表使用正则表达式,这个正则表达式可能对你有用。请注意,此表达式确实假定您将使用不区分大小写的选项。
示例文本
\DR1234 - this is a word, 123456, frank's place DA123 SW1 :50:/ one-hyphen two-hyphens-here I-have-three-hyphens
火柴
[0] => this
[1] => is
[2] => a
[3] => word,
[4] => frank's
[5] => place
[6] => one-hyphen
[7] => two-hyphens-here