2015-10-20 4 views
6

私は初心者ですので、その質問のために私を許してください。Pythonの文字列をスキャンし、2つの文字の間にupper()を使用する方法は?

<html> randomchars </html> 

出力:私は例 入力について<" and ">"

」の文字の間に文字を拡大書き込みプログラム希望ですか?

<HTML> randomchars </HTML> 

はそれを行う方法を

私はこれだけ書いたが、この雑誌すべての単語を統一します。

while True:    
    inp = input() 
    if inp == "": 
     break 
    elif inp =="<": 
     inp=inp.upper() 
     print(inp) 
    else: 
     print(inp) 

ありがとうございました。

+0

*この*コードを実際に試しましたか?私のために、それはテキストに何もしません。 inpは*文字列全体です。単一の小文字以外の記号だけを入力すると、出力が出力されます。 – Prune

+1

> 'について正規表現はHTMLを解析するのには適していません。文字をエスケープするときを知る以外に、ネストされた頭痛につながるネストされたタグの問題があります。 beautifulsoupのような適切なツールを使ってください:http://www.crummy.com/software/BeautifulSoup/bs4/doc/ –

+0

問題を明確にしてください。あなたの状態(おそらく宿題の一部)と同じくらい単純なのであれば、私の答えがあなたのために働くかもしれません。完全なHTML構文を攻撃しようとしている場合、このソリューションはオープンソースのパッケージとして提供される可能性があります。現在のパーソナルプログラミングリソースを超えている可能性があります。 – Prune

答えて

0

まず、「修理」の方法のうち、継続制御を取得するためにwhileループをしましょう。代わりに、ループ内臓のための今すぐ

while True: 
    inp = input() 
    if inp == "": 
     break 
    <process the input> 

使用

inp = input() 
while inp != "": 
    <process the input> 
    inp = input() 

、の。マークされた文字を大文字に変換するには、 "inp"を処理する必要があります。また、初心者が理解できるように、元のループフローと一致するようにしたいと考えています。

入力文字列の文字を反復処理する必要があります。あなたがマークされた領域にいるかどうかを知らせるブール値フラグを設定します。

upper_area = False 
    out_str = "" 
    for char in inp: 
     if char == '>': 
      upper_area = False 
     elif char == '<': 
      upper_area = True 
     elif upper_area: 
      char = char.upper() 
     out_str += char 
+0

ありがとうございました!ブリリアント! – Rarez

+0

実際には、あなたの現在のスキルレベルであなたの問題を解決することだけが「華麗」です。あなたがすぐに学ぶように、Pythonでこれを行うにはもっと*良い方法があります。とりわけ、次の '<'を見つけて、一度に1文字ずつではなく、その前にあるすべてのものを文字列として連結するほうがはるかに優れています。あなたの*コードの気持ちを固めようとしました。 – Prune

+0

条件の移動と入力の倍増についての最初の提案は改善ではありません。 – Ryan

0

正規表現を使用してタグを照合し、一致を修正する関数を渡したいとします。この前の回答を参照してください: Making letters uppercase using re.sub in python?

def upper_repl(match): 
    return match.group(1).upper() 

re.sub('(<[^>]*>)', upper_repl, '<span> <hey <annoy!>> </span>') 
'<SPAN> <HEY <ANNOY!>> </SPAN>' 
+4

彼はもっとも間違いなく、HTMLを解析するために正規表現を使用したくありません。 –

+0

さらに、OPはHTMLパーサを求めています... – mgilson

+0

彼はHTMLを解析することについて何も言わなかった。彼は文字を大文字に変換したいだけです。 – coder123

2

お試しre.sub;

print re.sub(r"(</?\w+>)", lambda up: up.group(1).upper(), "<tag>input</tag>") 

/?\w+以下の内訳、あなたは括弧()がグループを作り、我々はカッコ<>間で一致しようとしている見ることができると仮定すると、

  • ?は、前のREの0回または1回の繰り返しに匹敵します。 したがって、/?は開始タグと終了タグの両方に一致します。
  • \wは、a-z、A-Z、および0-9を含むすべてのUnicode単語に一致します。
  • +は、前のREの1回以上の繰り返しに貪欲にマッチします。

これは、ほとんどのタグが一致すると、あなたは、ラムダ関数、upを使用して、大文字インラインに変換した後、タグを置き換えることができます。

+1

「<([A-Z])\1>」?何?これは、 ''を 'XX'と置き換えます。' X'は*大文字の*文字です。 – Ryan

+0

@minitech、もう一度ご覧ください、私の答えを編集してください。 – mass

関連する問題