Java正規表現の一致 -- java フィールド と regex フィールド 関連 問題

Java regular expression match












11
vote

問題

日本語

文字列が数字で始まるときに一致する必要があり、次にドットが続き、1つのスペース、1つ以上の大文字の文字が続きます。一致は文字列の先頭に発生する必要があります。次の文字列があります。

<事前> <コード> 1. PTYU fmmflksfkslfsm

私が試した正規表現は次のとおりです。

<事前> <コード> ^d+[.]s{1}[A-Z]+

と一致しません。この問題のための正規表現が何であるか?

英語

I need to match when a string begins with number, then a dot follows, then one space and 1 or more upper case characters. The match must occur at the beginning of the string. I have the following string.

1. PTYU fmmflksfkslfsm 

The regular expression that I tried with is:

^d+[.]s{1}[A-Z]+ 

And it does not match. What would a working regular expression be for this problem?

</div
     
 
 

回答リスト

28
 
vote
vote
ベストアンサー
 

(私の以前の誤りで申し訳ありません。脳はしっかりと取り組んでいます。ER、おそらく。)

これは機能します:

<事前> <コード> String rex = "^\d+\.\s\p{Lu}+.*"; System.out.println("1. PTYU fmmflksfkslfsm".matches(rex)); // true System.out.println(". PTYU fmmflksfkslfsm".matches(rex)); // false, missing leading digit System.out.println("1.PTYU fmmflksfkslfsm".matches(rex)); // false, missing space after . System.out.println("1. xPTYU fmmflksfkslfsm".matches(rex)); // false, lower case letter before the upper case letters

それを破壊する:

  • <コード> ^ =文字列の開始
  • d+ = 1桁以上 \ \
  • <コード> . =リテラル<コード> . (またはあなたの元の<コード> 99887667 は細かい)(列にエスケープされています)
  • s = 1つの空白文字(<コード> {1} は必要ありません)(現在エスケープについては言及を停止します)
  • <コード> ^0 = 1つ以上の大文字(適切なUnicode Escapeを使用して - ありがとう、Tchrist、Tchristはの下のコメントで指しています。英語の用語で)同等のものは ^1
  • です。
  • <コード> ^2 = eres

ここでのドキュメント詳細については

^4 (上記)のようなメソッドを使用している場合は、全 ^3 だけ必要です。 >文字列。

 

(Sorry for my earlier error. Brain now firmly engaged. Er, probably.)

This works:

String rex = "^\d+\.\s\p{Lu}+.*";  System.out.println("1. PTYU fmmflksfkslfsm".matches(rex)); // true  System.out.println(". PTYU fmmflksfkslfsm".matches(rex)); // false, missing leading digit  System.out.println("1.PTYU fmmflksfkslfsm".matches(rex)); // false, missing space after .  System.out.println("1. xPTYU fmmflksfkslfsm".matches(rex)); // false, lower case letter before the upper case letters 

Breaking it down:

  • ^ = Start of string
  • d+ = One or more digits (the is escaped because it's in a string, hence \)
  • . = A literal . (or your original [.] is fine) (again, escaped in the string)
  • s = One whitespace char (no need for the {1} after it) (I'll stop mentioning the escapes now)
  • p{Lu}+ = One or more upper case letters (using the proper Unicode escape — thank you, tchrist, for pointing this out in your comment below. In English terms, the equivalent would be [A-Z]+)
  • .* = Anything else

See the documentation here for details.

You only need the .* at the end if you're using a method like String#match (above) that will try to match the entire string.

</div
 
 
       
       
1
 
vote

どのメソッドを使用しているかによって異なります。 matcher.find()を使用している場合は、それが機能すると思います。 Matcher.Matches()を使用している場合、一致は全行で動作しているため、機能しません。 matches()を使用している場合は、次のようにパターンを修正します。

<事前> <コード> ^5

(末尾に注意を払う<コード> .16 )

では、 .18 の代わりに ^7 を使用します。読みやすいです。

 

It depends which method are you using. I think it will work if you use Matcher.find(). It will not work if you are using Matcher.matches() because match works on whole line. If you are using matches() fix your pattern as following:

^d+.s{1}[A-Z]+.* 

(pay attention on trailing .*)

And I'd also use . instead of [.]. It is more readable.

</div
 
 
0
 
vote

<コード> ^9

 

"^[0-9]+. [A-Z]+ .+"

</div
 
 

関連する質問

11  木構造のための正規表現?  ( Regex for tree structures ) 
ツリー構造を検索して変更するための正規表現はありますか?簡潔なミニ言語(Perl Regexなど)が私が探しているものです。 これは私が探しているものを明確にするかもしれない例です。 <事前> <コード> <root> <node name="1"> ...

49  正規表現:文字列内の2つのタグ間のサブストリングを引き出す  ( Regex to pull out a sub string between two tags in a string ) 
私は次の形式でファイルを持っています: <前> データデータ データ [始める] データ私が欲しいデータ [終わり] データ <コード> [Start] [End] タグの間から Data I want を正規表現を使用してつかみたいと思います。誰かが...

6  PythonのReモジュールを使用して1回の急増で任意の順序付けられていないグループのセットを取得することが可能ですか?  ( Possible to retrieve an arbitrary unordered set of named groups in one swoop wit ) 
これはいくつかの問題に対してスーパーハンディーです: <事前> <コード> >>> re.search('(?P<b>.b.).*(?P<i>.i.)', 'abcdefghijk').groupdict() {'i': 'hij', 'b': 'abc'} ...

2  括弧で囲まれていないC#コードにすべてのIFステートメントを見つけたいです。正規表現を通して  ( I want to find all if statements in c sharp code which are not followed by brack ) 
すべての if ステートメントと for ステートメントを見つけたいと思います。 if ステートメントに1行を書くと、ほとんどカーリーブラケットに囲まれているため、それらすべての if および for ステートメント。 助けてください! この文をキャプチャし...

1  Perl:正規表現を使用してテキストからデータを抽出する  ( Perl extracting data from text using regex ) 
Perlを使用して正規表現でテキスト処理を行います。入力を制御していません。以下の入力の例をいくつか示しました。 項目BとCは、値が異なる文字列n回になることができます。私はすべての値を背面参照として取得する必要があります。それとも私はすべての耳です。 ブ...

5  DFA - >正規表現  ( Dfa regular expression ) 
私は紙にDFAを書いて、それを正規表現のセットに翻訳したいです。誰もがこれを行うための良いツールを知っていますか? ...

59  PREG_REPLACEをPHPで使用するときは、一致する方法がありますか?  ( How can i get at the matches when using preg replace in php ) 
私は単語の大文字をつかみ、それらをスパンタグで包み込もうとしています。 preg_replace を使用していますが、抽出目的では何も出力していません。 。 <事前> <コード> preg_replace("/[A-Z]/", "<span class="i...

30  C ++で使いやすい正規表現のサポート[閉まっている]  ( Easy to use regular expression support in c ) 
この質問はスタックオーバーフローガイドラインを満たしていません。現在答えを受け付けていません。 この質問を改善したいですか? ...

1  正規表現のマッチング文字を除く  ( Excluding matching characters in regular expression ) 
私は正規表現の問題で立ち往生しています。 私は一致する必要がある文字列を持っています。文字列は常に2文字で始まり、次に6桁の数字、e.g。 EF123456 AB123456 しかし、無視する必要がある文字の組み合わせが1つあります。 e.g。: ...

2  単語または句のインスタンスを見つけるための正規表現 - その単語やフレーズが中括弧である場合を除く  ( Regex to find instance of a word or phrase except if that word or phrase is i ) 
最初の免責事項。私は正規表現について少し知っていますが、私は専門家ではありません。彼らは私が一年に2回、私が本当に2回必要なものであるようですので、私の脳の「上に」しないでください。 状況:特定の単語を一致させるために正規表現を書いて、それを「osttric...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有