2017-09-22 6 views
1

私は本当にRegExをあまり使用していません。あなたは私がRegEx n00bだと言うことができます。私はこの問題について半日も働いています。RegExは数字の前に複数の文字より多く

数字の文字から後方に見えるパターンを書き込もうとしています。たとえば:

1. bob1 => bob 
2. cat3 => cat 
3. Mary34 => Mary 

は、これまでのところ、私はすべての文字番号の文字の前にしたい、それが唯一の個々の文字に一致し、この (?![A-Z][a-z]{1,})([A-Za-z_]) を持っています。私は ^$を私のパターンに加えて、 online simulatorを使ってみました。私は ^$をどこに置くべきかわかりません。

注:私たちはあなたの正規表現を打破する場合は、.NET Frameworkの

+2

数字の前に文字を一致させようとしていますか? ['\ p {L} +(?= \ d)'](http://regexstorm.net/tester?p=%5cp%7bL%7d%2b%28%3f%3d%5cd%29&i=bob1+% 3d%3e + bob%0d%0acat3 +%3d%3e + cat%0d%0aMary34 +%3d%3e + Mary)? –

+1

説明してください:1)これらの文字列はスタンドアロンの文字列ですか? 2)ここでのルールは何ですか?文字列を一致させる必要がある理由は何ですか?問題をよりよく理解するためのコードを表示してください。 –

+0

ここで先読みを使用する特別な理由はありますか?私は、直接のマッチは、通常、ほとんどの場合、より良く機能することを発見しました(そして一般的に移植性が高い)。 –

答えて

0

のための正規表現を使用しています、私たちは以下を参照してくださいと言う

(?![A-Z][a-z]{1,})「は、その後1つの大文字がない文字列を見つけるために先読み「1文字またはアンダースコアに一致する」と記載されている([A-Za-z_])を使用します。これは、単一の小文字にマッチするはずです。

達成したいことがわかっている場合は、数字の前にすべての文字が必要です。これは、単語の境界\b、マッチ一つ以上の文字で始まり、右マッチした文字列の後の数字が必要になります

\b([a-zA-Z]+)[0-9] 

:私はそのようなことを書くでしょう。

\b[a-zA-Z_]+(?=[0-9]) 

これはパターンに一致します。Wiktor第Stribizewさんのコメントを踏まえて

が、ここでは純粋なマッチ正規表現です:

は( https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions私が使用する構文は、.NET正規表現については、このドキュメントにマッチしているようです)次に数字を探します。これは私の最初の先読みの試みよりも優れています。 (Wiktorありがとうございます。)

http://www.rexegg.com/regex-lookarounds.html

1

[\p{L}_]+(?=\d) 

または

[\w-[\d]]+(?=\d) 

regex demo

パターンが

の詳細を参照してくださいようにあなたは正規表現を使用することができます
  • [\p{L}_]+ - (小文字と大文字の両方)及び/又は_
    OR
  • [\w-[\d]]+任意の1つのまたはそれ以上の文字 -数字(文字クラス内部-[]以外は、1以上の単語文字であります文字クラス減算構造)
  • (?=\d) - 現在の場所のすぐ右側に表示されるように数字を必要と肯定先読み
+0

申し訳ありませんが、言葉は数字を持つこともできません。数字がない場合は、単語全体にマッチします。どうすればそのことを知ることができますか? –

+0

@ PeterSun文字チャンクのコンテキストを制限する必要がない場合は、先読みを削除します。しかし、現在の質問の範囲にはありません。抽出のための* exact *規則を提供することが最善でしょう。それ以外の場合は、推測ゲームのように見えますが、私の対戦相手でも自分が望むことを知らないものを推測するのは非常に悪いです。 –

関連する問題