【问题标题】:Suppress 'u' in Output - Python在输出中抑制'u' - Python
【发布时间】:2016-06-20 10:14:51
【问题描述】:

我怎样才能在输出中摆脱这些u

正则表达式:

Tregex1 = "1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?"

代码:

for a in re.findall(Tregex1,text_value,re.IGNORECASE):
        print a

输出:

(u'877', u'638', u'7848', u'\n', u'')
(u'650', u'627', u'1000', u'\n', u'')
(u'650', u'627', u'1001', u'\nE', u'')
(u'312', u'273', u'4100', u'', u'')

我尝试使用这些并关注了几个类似的links

a.encode('ascii', 'ignore')
a.encode('utf-8')
",".join(a)

但它们都不起作用。

预期输出:

877-638-7848
650-627-1000
650-627-1001
312-273-4100

我正在使用 Python 2.7

也有人可以解释一下,为什么我有时会得到 \n 而 \nE 否则甚至是空白?

【问题讨论】:

  • 您不必担心u 前缀,它只会告诉您字符串是Unicode。
  • @downvoter 原因好吗?

标签: python regex encoding


【解决方案1】:

试试这个:

for a in re.findall(Tregex1,text_value,re.IGNORECASE):
    print '-'.join(a[:3])

你只是告诉你这是一个 unicode 字符串。

(..., ...,) 是元组的表示

'-'.join(...) 所做的是将 ... 的字符串与 - 连接

a[:3] 表示“只有 a 的前三个元素”

(有关python中切片符号的一个很好的解释,请看这里:https://stackoverflow.com/a/509295/327293

【讨论】:

    【解决方案2】:

    您的问题不是u。如果你想以特定的方式格式化你的结果,你应该使用字符串格式化函数。

    print '-'.join(a)
    

    【讨论】:

      【解决方案3】:

      u 只是表示它是 unicode。您可以根据需要重新编码。这将起作用,并且还会跳过空白值:

      a = (u'877', u'638', u'7848', u'\n', u'')
      print "-".join([x.strip() for x in a if x.strip() != u""])
      

      877-638-7848

      【讨论】:

      • 不要使用is 进行字符串比较。
      • @Dan 我认为 phogi 的回答更省时,因为它不需要检查第四个索引
      猜你喜欢
      • 1970-01-01
      • 2012-01-08
      • 2012-10-30
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      相关资源
      最近更新 更多