A具有以下格式的一系列字符串。演示示例如下所示:
71 1 * abwhf
8 askg
*14 snbsb
00ab
我正在尝试编写一个Python 3程序,该程序将使用 for 循环遍历每个字符串,并在首次出现字母时将其拆分为一个包含两个元素的列表。
上面的字符串的输出将成为具有以下元素的列表:
71 1 *
和 abwhf
8
和 askg
*14
和 snbsb
00
和 ab
还有就是 应该 是在编辑器中的前三个例子中第一个字符串后面输入一个空格,但是这只能说明
如何以这种方式分割字符串?
这里有两个相关的帖子:
第一个问题的第一个答案使我可以在第一次出现单个字符而不是多个字符(像字母表中的所有字母)时将字符串拆分。
第二个字母允许我在第一个字母处拆分,而不仅仅是一次。使用此方法将导致包含许多元素的数组。
使用re.search
:
import re
strs = ["71 1 * abwhf", "8 askg", "*14 snbsb", "00ab"]
def split_on_letter(s):
match = re.compile("[^\W\d]").search(s)
return [s[:match.start()], s[match.start():]]
for s in strs:
print split_on_letter(s)
正则表达式[^\W\d]
匹配所有字母字符。
\W
匹配所有非字母数字字符并\d
匹配所有数字字符。^
在集合的开头,反转选择以匹配所有不匹配(非字母数字或数字)的所有内容(与所有字母相对应)。
match
搜索字符串以查找匹配表达式的第一个匹配项的索引。您可以根据匹配的位置对原始字符串进行切片,以获得两个列表。
我有很多这样的字符串: 我想拆分这些字符串,使其如下所示: 然后,这些将被添加到数据集中并在以后进行分析。 我遇到的问题是,如果我使用以下代码: 它会将它们分裂两次;我只想在第二次出现:时将其拆分一次。 我该怎么做呢?
问题内容: 我认为这是一个简单的问题,但是我找不到简单的解决方案(例如,少于10行代码:) 我有一个诸如,我需要将其转换为。 请注意,首字母不是大写。 问题答案: 您可以将正则表达式使用零宽度正向超前-它可以找到大写字母,但不会将它们包括在定界符中: ,后跟,但不包含在match中。因此,匹配一个空序列后跟一个大写字母,并将其用作定界符。 有关Java regexp语法的更多信息,请参见javad
问题内容: 我正在使用Java 从用户那里获取输入。我正在尝试将此输入的首字母大写。 我尝试了这个: 导致这些编译器错误: 类型不匹配:无法从InputStreamReader转换为BufferedReader 无法在基本类型char上调用toUppercase() 问题答案: 使用Apache的公共库。从这些东西中解放出来,避免空指针和索引超出范围的异常 步骤1: 通过将apache的公共lan
问题内容: 输入示例: 输出示例: 字母和数字部分的长度不固定。 我知道如何将split()与regex一起使用,但是尽管我检查了Java API,但找不到任何可以帮助我解决此问题的东西。 有没有办法做到这一点?或者我需要使用另一种方法来拆分这些字符串。 任何帮助,将不胜感激。 问题答案: 试试这个正则表达式: 这是一个正在运行的示例:http : //ideone.com/c02rmM 正则表达
问题内容: 所以我有一个像这样的字符串 我想做的就是分割此字符串,以便得到以下信息: 的作为对所述第三元件是指示所述的单原子性质元件。相同。这实际上是我正在努力的部分。 这是一个化学方程式,因此我需要根据元素的名称和存在的原子数量等来分离元素。 问题答案: 您可以尝试这种方法: 输出: 原子:[C,3,H,20,I,1,O,1] 现在所有偶数索引(0、2、4 …)都是原子,奇数是关联的数字: 输出
我有一个字符串,,我想把它分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包含之后的字符。我还想检查字符串中是否有。如果没有,我会抛出一个异常。我该如何做到这一点?