私信  •  关注

The fourth bird

The fourth bird 最近创建的主题
The fourth bird 最近回复了
3 年前
回复了 The fourth bird 创建的主题 » Python正则表达式匹配以大写字母和长度范围开头的字母数字

这里的量词 [0-9]{10,22} 重复匹配10-22个数字。

如果要验证总字符数,应锚定该字符串,并在下一个锚定之前使用前瞻键验证字符数 ^(?=[A-Z\d,/]{10,22}$)

^(?=[A-Z\d,/]{10,22}$)[A-Z]{2,}[A-Z\d,/]*\d$

Regex demo

4 年前
回复了 The fourth bird 创建的主题 » 使用python中的正则表达式在文件中选择一组特定的字符

如果一个文件中有很多视图,另一个选项是防止使用 .*? 具有 re.DOTALL 防止不必要的回溯。

相反,您可以匹配 VIEW SELECT FROM 检查介于两者之间的内容是否是另一个关键字,以防止使用负面前瞻进行过多匹配(假设这些不会发生在两者之间)

对于FROM之后的最后一部分,可以匹配单词字符,可以选择使用空格字符和单词字符重复。

^(VIEW\s+(\w+))(.*(?:\n(?!SELECT|VIEW|FROM).*)*)\nSELECT\s+(.*(?:\n(?!SELECT|VIEW|FROM).*)*)\nFROM\s+(\w+(?:\s+\w+));

模式匹配:

  • ^ 字符串开头
  • (VIEW\s+(\w+)) 捕获组以供查看,后面是一组字符
  • (.*(?:\n(?!SELECT|VIEW|FROM).*)*) 捕获与其余行匹配的组,以及所有不以关键字开头的行
  • \nSELECT\s+ 匹配换行符,选择1+空格
  • (.**:\n(?!选择|查看|自)。*)*) 捕获与其余行匹配的组,以及所有不以关键字开头的行
  • \nFROM\s+ 匹配换行符、FROM和1+空格字符
  • (\w+(?:\s+\w+)) ; 为FROM的值捕获组,匹配1+个单词字符,并可选地按空格字符和单词字符重复

Regex demo

例如(您可以省略 re.VERBOSE 重新。多塔尔 )

import re

methodRegex = r"^^(VIEW\s+(\w+))(.*(?:\n(?!SELECT|VIEW|FROM).*)*)\nSELECT\s+(.*(?:\n(?!SELECT|VIEW|FROM).*)*)\nFROM\s+(\w+(?:\s+\w+));"
fContent = ("VIEW Company_Person_Sd IS\n"
            "   Prompt = 'Company'\n"
            "   Company.Prompt = 'Company ID'\n"
            "SELECT company_id                          company_id,\n"
            "       emp_no                              emp_no,\n"
            "       Get_Person(company_id, emp_no)      person_id,\n"
            "       cp.rowid                            objid,\n"
            "       to_char(cp.rowversion)              objversion,\n"
            "       rowkey                              objkey\n"
            "FROM   companies cp;")
methodMatches = re.finditer(methodRegex, fContent, re.MULTILINE | re.IGNORECASE)

for methodMatchNum, methodMatch in enumerate(methodMatches, start=1):
    methodContent = methodMatch.group()
    methodNameFull = methodMatch.group(1)
    methodType = methodMatch.group(2)
    methodName = methodMatch.group(3)
6 年前
回复了 The fourth bird 创建的主题 » 如何在Python2.7中循环重复替换模式匹配?

要获取AddLine的值,必须使用 print(AddLine) 在同一缩进水平下 AddLine = re.sub(r" ([0-9]+[-][0-9]+)", '\g<1>\n', line)

如果您希望捕获组从新的行开始,可以预先 \n 对于捕获组:

\n\g<1>\n

注意,在模式中,也可以匹配不带字符类的连字符:

([0-9]+-[0-9]+)

Regex demo

6 年前
回复了 The fourth bird 创建的主题 » python-从ip地址中删除前导零

如果唯一的数据是IP,则可以使用字边界 \b ,匹配1+零并使用捕获组匹配1+个数字,并在替换中使用该组。

\b0+(\d+)

替换为

r'\1'

Regex demo γ Python demo

例如

import re

def remove_zeros_from_ip(ip_add):
  string = re.sub(r'\b0+(\d+)', r'\1', ip_add)  
  return string

ip = '10.0.01.10'
print(remove_zeros_from_ip(ip))

ip1 = '10.00.002.20'
print(remove_zeros_from_ip(ip1))

产量

10.0.1.10
10.0.2.20
7 年前
回复了 The fourth bird 创建的主题 » python regex两个单词分开

对于示例数据,也可以使用 \w+ 与一个字符匹配一次或多次。使用 [^\s]+ \S+ 匹配一个或多个非空白字符,范围更广。

你的正则表达式从 [ ]{0,1} 它与零或一次空白相匹配,这使得它是可选的。在开始处保留空白并使用问号使其成为可选的,您可以添加可选的分组结构。 (?:[ ]\w+)? 它将匹配一个空格,然后匹配一个单词字符的一次或多次。

你的regex看起来像:

^[ ]?\w+(?:[ ]\w+)?$

Regex demo

6 年前
回复了 The fourth bird 创建的主题 » python regex:最多有一个空格的字符串

另一种选择是使用zip和dict,并根据匹配的长度生成字符。

您可以使用与非空白字符匹配的重复模式获取最多包含一个空白的匹配项。 \S 在空格后加上非空白字符,重复0+次:

\S(?: \S)*

Regex demo γ Python demo

例如:

import re
a=97
regex = r"\S(?: \S)*"
test_str = "a    b d d  c"
matches = re.findall(regex, test_str)
chars = list(map(chr, range(a, a+len(matches))))
print(dict(zip(chars, matches)))

结果

{'a': 'a', 'b': 'b d d', 'c': 'c'}