免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5300 | 回复: 8
打印 上一主题 下一主题

python字符串截取的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-28 14:38 |只看该作者 |倒序浏览
本帖最后由 dongdong82CU 于 2011-12-29 15:44 编辑

我有n个字符串,类似“192.168.1.100:1234cbdjdd(IP和端口以及后面字符的长度都不同)”,我想把IP和端口取出来
因为ip和端口的长度都不确定,我现在现在不能以字符索引去截取字符串,不知道应该怎么写

招聘 : 技术支持/维
论坛徽章:
0
2 [报告]
发表于 2011-12-29 13:48 |只看该作者
这个貌似没辙了,:1234cbdjdd 端口号和后面的字符串直接没有其他的字符了吗?
或者 cbdjdd 一定是以字符开头的,也可以实现。
如果1234是端口号,后面的字符串是689abc,那么是没办法分开的

论坛徽章:
0
3 [报告]
发表于 2011-12-29 15:43 |只看该作者
端口后面的是用户名,以字母开头的

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
4 [报告]
发表于 2011-12-29 15:48 |只看该作者
没弄明白楼主的意思
不过我想可以用正则,以:为分隔线,前面是ip,后面的数字是端口,匹配/d+

论坛徽章:
0
5 [报告]
发表于 2011-12-29 16:12 |只看该作者
你这个问题用shell很好解决
echo "192.168.1.100: 1234cbdge" | sed -r 's/(.*):[ ]*([0-9]*).*/\1 \2/'

论坛徽章:
0
6 [报告]
发表于 2011-12-29 16:19 |只看该作者
awk也可以
echo "192.168.1.100: 1234cbdge" | awk -F: '{t=match($2,/[a-zA-Z]/);port=substr($2,0,t-1);print $1,port}'

论坛徽章:
0
7 [报告]
发表于 2011-12-29 16:35 |只看该作者
用python写了一个笨方法,因为我也是刚学
import string
import re
def IPandPort(str):
      fli=string.split(":")
      sli=re.split("[a-zA-Z]",fli.strip())
      print "IP=%s, Port=%s" % (fli[0],sli[0])

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:50:28
8 [报告]
发表于 2011-12-29 17:06 |只看该作者
本帖最后由 noword2k 于 2011-12-29 17:06 编辑
  1. m = re.search(r"(\d*)\.(\d*)\.(\d*)\.(\d*):(\d*)(.*)", "192.168.1.100:1234cbdjd")
复制代码
看看 m.group(1)到m.group(6)

论坛徽章:
0
9 [报告]
发表于 2012-01-03 21:47 |只看该作者
本帖最后由 inpool 于 2012-01-03 21:49 编辑
  1. ipstr = '192.168.1.100:1234cbdjdd'
  2. ipsplit = ipstr.split(':')
  3. ip = ipsplit[0]
  4. for i, c in enumerate(ipsplit[1]):
  5.     if not c.isdigit():break
  6. port = ipsplit[1][:i]
  7. username = ipsplit[1][i:]
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP