説明
あなたのコメントに基づいて: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