2016-11-17 6 views
1

私はいくつかのテキストチャンクを消毒しようとしています。私はregexifの束を持っているよりむしろ素晴らしい解決策かもしれないと思った。しかし、うーん、私は正規表現でそれほど良くありません。だから私はあなた方のうちの何人かが私を助けてくれることを願っていました。2番目の非英数字のインデックスを取得

場合 私は私がの指標を得ることができることを知っている私が探している結果が

one = "tbEmails"; 
two = "dbo.tbEmails"; 
three = "dbo.tbEmails"; 
four = "dbo.tbEmails"; 

あるformattetすることが

string one = "tbEmails"; 
string two = "dbo.tbEmails"; 
string three = "dbo.tbEmails,\n\t"; 
string four = "dbo.tbEmails."; 

を必要とする別のテキストを持っています使用して最初の英数字以外の値

int index = new Regex("[^a-zA-Z ]").Match("dbo.tbEmails,\n\t").Index; 

しかし、最初の.を正規表現で無視し、2番目の非英数字値のインデックスを取得するにはどうすればよいですか?また、ボーナスとして:文字列に.がない場合の最初の非英数字値を返す方法はありますか?

+1

あなたはすべてのマッチを取得し、必要なデータを 'match [1]'から得ることができます。しかし、あなたは 'Regex.Replace(str、@"(?s)^([^ W W])+(?:[\ W _] +)?) ); '、[demo](http://regexstorm.net/tester?p=%5e%28%5b%5e%5cW_%5d%2b%28%3f%3a%5b%5cW_%5d%5b%を参照) 5e%5cW_%5d%2b%29%3f%29。*&i = tbEmails%0d%0adbo.tbEmails%0d%0adbo.tbEmails%2c%0d%0adbo.tbEmails。&r =%241&o = m)。 –

+1

'string.Trim()'はどうですか? – dymanoid

+1

あなたは自分の問題をはるかに複雑な方法で述べているようですが、やりたいことよりもはるかに簡単な例があります。 – Kir

答えて

1

基本的には、N番目の一致指数を取得するには、単に必要なインデックスの項目にアクセスできる場合は、すべての一致を検索し、チェックするためにRegex.Matchesを使用し、YESの場合、Matchオブジェクトから必要な詳細情報を取得する:

var index = -1; 
var matches = Regex.Matches(str, @"[^a-zA-Z ]"); 
if (matches.Count > 1) // at least 2 
{ 
    index = matches[1].Index; 
} 

はBTW、英数字以外のパターンは[\W_]で、英数字は[^\W_](又は[\w-[_]])です。

var match = Regex.Match(str, @"^[^\W_]+(?:[\W_][^\W_]+)?"); 
if (match.Success) 
{ 
    Console.Write(match.Value); 
} 

はまた、あなたがregex demo

それとも単純にマッチする正規表現を参照してくださいあなたは

Regex.Replace(str, @"(?s)^([^\W_]+(?:[\W_][^\W_]+)?).*", "$1"); 

で求める結果を得るために操作を置き換える正規表現を使用することができているようです詳細

  • ^ - 文字列の先頭
  • [^\W_]+から1以上の英数字文字
  • (?:[\W_][^\W_]+)? - の1又は0の出現: - 英数字文字
  • [^\W_]+以外1 CHAR - 1又は
    • [\W_]より多くの英数字。
0

あなたは自分自身に問題をはるかに複雑な方法で述べているように思えるか、あなたがしようとしているものよりはるかに単純な例を挙げているようです。

文字列の先頭と末尾から不要な文字を削除しようとすると、myString.Trim( '\ n'、 '。')を実行できます。

Regex.Replace(str, "[^\\w]*$","");

0

あなたが直接あなたの一致を得るために、この正規表現を使用することができます:

string value = new Regex("[A-Za-z ]+(?:[^A-Za-z ][A-Za-z ]+)?").Match("dbo.tbEmails,\n\t").Value; 

あなたが削除しようとしている文字の具体的なセットがわからない場合、あなたはこれを行うことができます[A-Za-z ]+という用語は、すべての[A-Za-z]文字が最初の非[A-Za-z]文字まで一致します。 (?:[^A-Za-z ][A-Za-z ]+)は、最初の他の文字とすべての[A-Za-z]文字を2番目の他の文字まで一致させます。は、2番目の部分を条件付きにします。

関連する問題