2016-09-19 15 views
1

アポストロフィを除いて、スペースと非単語文字に基づいて分割して含めることを試みています。Java Regex:アポストロフィ以外の単語以外の文字に基づく分割

私はそれを分割して空白と非単語文字に基づいて含めることができましたが、単語以外の文字からアポストロフィを除外する方法を見つけることはできません。

これは...このコードサンプル上で実行

str.split("\\s|(?=\\W)"); 

...私の現在の正規表現です:...

program p; 
begin 
    write('x'); 
end. 

この結果を生成します。

program 
p 
; 
begin 

write 
(
'x <!-- This is the problem. 
' 
) 
; 
end 
. 

これはほぼ正しいですが、これが結果であるようにアポストロフィをスキップすることです:

program 
p 
; 
begin 

write 
(
'x' <!-- This is the wanted result. 
) 
; 
end 
. 

UPDATE

としては、私が試した提案:

program 
p; 
begin 
write(
'x' 
) 
; 
end. 
+0

このあなたのために働いている: '([^ \\ W '] +)' – Toto

+0

ないJava [サポート文字クラス減算](http://www.regular-expressions.info/charclasssubtract。 html)?あなたのケースに役立つ可能性があります。 – wpcarro

+0

@Toto私はアポストロフィが効いていますが、他の特殊文字は含まれていませんでした:program mini begin write 'x' end –

答えて

1

これに分割することができます。

\s|('[^']*')|(?=\W) 

デモを参照してください。

https://regex101.com/r/mL7eL6/1

+0

を試してくださいこれはRegex101でうまくいきますが、正しく表示されるためにはどのように '\ n $ 1'の置換をJavaで追加できるのか分かりません。 –

+0

@DarkKnight Pythonで分割すると...キャプチャされたグループが自動的に表示されます.... Javaでわからない – vks

+0

@DarkKnightはそれを試してみましたか?それによって分割されました – vks

2

が持っている:ほとんど動作しますが、正しく特殊文字のすべてを分割しない

str.split("\\s|(?=\\W)(?<=\\W)"); 

をあなたは試しました...

[^\w'] 

これは、単語文字でもアポストロフィでもない文字に一致します。あなたの入力に応じて作業するのに十分シンプルであるかもしれません。

[^\w']を正規表現として使用して置換操作を実行し、置換文字列として\n\1\nを使用すると、その場所に近づけることができます。

+1

これは、単語文字*ではなく*アポストロフィではないすべてのものにマッチしていると言っています...' [^ \ w] 'と' [^^\ w '] '。あなたのdownvoteを再考してください。 [これを参照](https://regex101.com/r/yX3kG2/1)対[this](https://regex101.com/r/yT7mH7/1)。 – wpcarro

+0

私の間違い。私は何とかそれを '[^ \ W ']' – NullUserException

0

別々にアポストロフィを治療し、先行する非ワードを必要とする:

str.split("\\s+|(?=[^\\w'])|(?<=\\W)(?=')"); 

live demoを参照してください。

+0

として読んでいます。これは、特殊文字のいくつかを分割しますが、すべてではありません。プログラム ミニ;書き込みを始める( 'x');終わり。 –

+0

更新されたバージョン – Bohemian

関連する問題